根据另一个字典和两个列表的输入输出字典

时间:2018-09-27 07:48:40

标签: python python-2.7 list dictionary

我有一个字典和两个列表,并想输出另一个字典,该字典包含单个列表作为标题,列表内容的总和作为值,但是,我不知道如何做到这一点。

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'}

编辑:由于我发现熊猫的简单性更适合我的理解水平,因此我决定使用熊猫来处理上述数据。谢谢大家的帮助!

4 个答案:

答案 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']}