我有一个字典和两个列表,并想输出另一个字典,该字典包含单个列表作为标题,列表内容的总和作为值,但是,我不知道如何做到这一点。
results = {'Apple':'14.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'9.0'}
ListA = ['Apple','Pineapple']
ListB = ['Banana','Orange']
输出:
dicttotal = {'ListA':'23.0', 'ListB':'14.0'}
编辑:由于我发现熊猫的简单性更适合我的理解水平,因此我决定使用熊猫来处理上述数据。谢谢大家的帮助!
答案 0 :(得分:1)
在python中,您可以使用列表推导功能来使其易于阅读:
items_for_a = [float(v) for i, v in results.items() if i in ListA]
total_a = sum(items_for_a)
您要打印的dicttotal
很奇怪。我不希望您将变量名打印为字典键。
在python2中,您应该使用.iteritems()
而不是.items()
答案 1 :(得分:1)
您可以使用下面的代码获取ListA的总和。 ListB的方法相同。自己动手
dicttotal = {}
ListASum = 0.0
ListBSum = 0.0
for item in ListA:
if item in results:
ListASum += float(results[item])
dicttotal['ListA'] = ListASum
答案 2 :(得分:0)
减少和理解字典,以创建具有初始值的字典,然后更新单个值。如果键名不是变量名,则可能两者都可以完成dict理解。
from functools import reduce
d_total = {'ListA': str(reduce(lambda x, y: float(results[x]) + float(results[y]), lista))}
d_total['ListB'] = str(reduce(lambda x, y: float(results[x]) + float(results[y]), listb))
{'ListA': '23.0', 'ListB': '14.0'}
注意:PEP-8 snake_case用于命名
答案 3 :(得分:0)
使用(丑陋的)eval()
函数的单行代码,但是正如Eduard所说,最好不要将变量名用作键:
{list_name: str(sum([float(results[item]) for item in eval(list_name)])) for list_name in ['ListA', 'ListB']}