Python添加2个带有常用键的列表到字典
Posted
技术标签:
【中文标题】Python添加2个带有常用键的列表到字典【英文标题】:Python Adding 2 list with common keys to dictionary 【发布时间】:2017-02-22 03:26:22 【问题描述】:我是 python 新手。我正在从 csvfile 中提取两行。
Foodlist = ['apple, carrot, banana','chocolate, apple', 'strawberry, orange, carrot']
数量列表对应其顺序中的每一项。
Quantity = ['1,2,1','2,5','1,2']
如何将两个带有公共键的列表合并到字典中?我尝试拆分和加入,但由于公共键,数量被覆盖。
我正在尝试输出:
'Apple: totalquantity','Banana: totalquantity',
'Carrot: totalquantity','Chocolate: totalquantity',
'orange: totalquantity', 'strawberry: totalquantity'
请帮忙!
无论如何我可以提取食品的 csvfile 行并在字典中分配其值吗?
对于cvs文件如下:
第 1 行: 苹果、胡萝卜、香蕉 巧克力,苹果 草莓、橙子、胡萝卜
第 2 行: 1,2,1 2,5 1,2
【问题讨论】:
这能回答你的问题吗? ***.com/questions/11011756/…Foodlist
中列出的食物比Quantity
中的数字还多。这是故意的吗?此外,您应该避免使用大写标识符命名类型以外的内容。
【参考方案1】:
您可以使用Counter
来聚合结果:
from collections import Counter
Foodlist = ['apple, carrot, banana','chocolate, apple', 'strawberry, orange, carrot']
Quantity = ['1,2,1','2,5','1,2']
res = Counter()
for f_list, q_list in zip(Foodlist, Quantity):
for f, q in zip(f_list.split(', '), q_list.split(',')):
res[f] += int(q)
print(res)
输出:
Counter('apple': 6, 'chocolate': 2, 'carrot': 2, 'orange': 2, 'strawberry': 1, 'banana': 1)
【讨论】:
【参考方案2】:使用 collections.default_dict 设置字典来计算您的项目。
In [1]: from collections import defaultdict
In [2]: items = defaultdict(int)
In [3]: Foodlist = ['apple, carrot, banana','chocolate, apple', 'strawberry, or
...: ange, carrot']
In [4]: Quantity = ['1,2,1','2,5','1,2']
In [5]: for which, counts in zip(Foodlist, Quantity):
...: foods = [w.strip() for w in which.split(',')] # Split the foods and remove trailing spaces
...: nums = [int(c) for c in counts.split(',')] # Split the counts are convert to ints
...: for f, n in zip(foods, nums):
...: items[f] += n
...:
In [6]: items
Out[6]:
defaultdict(int,
'apple': 6,
'banana': 1,
'carrot': 2,
'chocolate': 2,
'orange': 2,
'strawberry': 1)
In [7]:
【讨论】:
以上是关于Python添加2个带有常用键的列表到字典的主要内容,如果未能解决你的问题,请参考以下文章