我完全是一个编程初学者,只是需要一些帮助。
我的梦想是编写一个智能购物清单,它可以自动检测重复产品并增加重复产品的重量。
我从外部文件获得购物清单,该文件具有以下格式:
体重 n原料 n如:
60
eggs
120
beef meat
25
pasta
120
eggs
等等……
用下面的代码将这些文件转换为字典后:
final_list = []
def get_list(day_list):
for day in range(len(day_list)):
day += 1
day_to_open = f'Days/day{str(day)}.txt'
with open(day_to_open, 'r') as file:
day1 = file.readlines()
day1 = [item.rstrip() for item in day1]
x = 0
y = 1
list = []
for item in range(0, len(day1), 2):
dictio = {day1[y]: day1[x]}
x += 2
y += 2
list.append(dictio)
final_list.append(list)
list = []
for item in final_list:
list += item
return list
days = [1, 2, 3]
list = get_list(day_list=days)
最后我得到了一个这样的字典列表:
[{'eggs': '60'}, {'beef meat': '120'}, {'pasta': '25'}, {'eggs': '120'}]
我如何遍历字典来检查是否有产品是重复的,如果是,留下一个添加的权重?
三个星期以来,我一直试图解决这个问题,但不幸的是无济于事。
非常感谢您的帮助!
#编辑我的目标是使它看起来像这样:
[{'eggs': 180}, {'beef meat': 120}, {'pasta': 25}]
#加蛋重(120 + 60)#
lis = [{'eggs': '60'}, {'beef meat': '120'}, {'pasta': '25'}, {'eggs': '120'}]
# make 1 dict from list of dicts and update max value
new = {}
for d in lis:
for k, v in d.items():
if (k not in new) or (int(v) > int(new[k])):
new[k] = v
# rebuild list of dicts
lis = [{k:v} for k, v in new.items()]
print(lis)
# [{'eggs': '120'}, {'beef meat': '120'}, {'pasta': '25'}]
正如shadowwranger所指出的那样,拥有多个字典的列表是不常见的做法。如果使用得当,字典是非常有用的。
我不完全确定你正在阅读的文件的结构,所以我将只是解释一种前进的方式,让你自己实现它。我的建议是,首先初始化一个字典,其中包含所有必要的键(在您的示例中是成分),每个值都设置为0(作为整数或浮点数,而不是字符串),因此您将得到这样一个字典:
shopping_list = {'eggs': 0, 'beef meat': 0, 'pasta': 0}
然后,您将能够通过调用shopping_list字典并指定感兴趣的键来访问每个值。例如,如果你想打印鸡蛋的值,你可以这样写:
print(shopping_list['eggs']) # this would return 0
你可以很容易地增加/减少感兴趣的值;例如,要给意大利面加10,你可以这样写:
shopping_list['eggs'] += 10
使用此方法,您可以遍历每个项目,选择感兴趣的成分并添加权重。所以如果你有重复的,它只会添加到相同的成分。同样,我不确定您正在阅读的文件的结构,但它应该是这样的:
for ingredient, weight in file:
shopping_list[ingredient] += weight
祝你梦想成真——一切顺利!