在Python中,如何在字典的列表中对元组中的数字列表求和?

时间:2012-02-15 12:26:48

标签: python dictionary tuples

huge =  sum([x for key in G for (_,x) in G[key]]+1)

这是我到目前为止,虽然它返回一个类型错误,但只能将列表(不是“int”)连接到我不理解的列表。

基本上我处理类似

的数据结构
{1: [("A",2), ("B",3)]}

等等,所以字典中的每个键都有一个元组列表的值,而第二个项目,每个元组的index = 1是我想要求和的值,所以在例子中我得到:

huge = 5   # i.e. 2 + 3

有什么建议吗?

7 个答案:

答案 0 :(得分:5)

>>> G = {1:[("A",2),("B",3)]}
>>> sum(y for v in G.itervalues() for (x, y) in v)
5

错误来自试图添加列表和数字的表达式[x for key in G for (_,x) in G[key]] + 1。那是TypeError

答案 1 :(得分:1)

我认为你所寻找的是这样的:

for itertools import chain
sum([v for _, v in chain.from_iterable(G.values())])

或懒惰评估:

sum(v for _, v in chain.from_iterable(G.itervalues()))

答案 2 :(得分:0)

我的python生锈了,但你基本上已经

huge = sum([...list...] + 1)

我认为你抱怨你在列表中添加1。你的意思是:

huge = sum([...list...]) + 1

答案 3 :(得分:0)

sum = 0
for key, item in data.iteritems():
    for group in item:
        sum += group[-1]

应该工作得很好。

并非一切都必须是列表理解

答案 4 :(得分:0)

这可能不是最恐怖的,但它是直截了当的:

my_map = {1:[("A",1),("B",2)],2:[("C",3),("D",4)]}

total = 0

for k in my_map.keys():
    this_list = my_map[k]
    for this_tuple in this_list:
        total += this_tuple[1]

print total

答案 5 :(得分:0)

我认为我们还没有

sum(group[1] for value in data.itervalues() for group in value)

答案 6 :(得分:0)

你是说你想要总结列表G [1]中的元组?如果是这样,那就是你所追求的:

huge = sum(x for _, x in G[1])

注意:在汇总之前,您不需要构建新列表;省略方括号一次性完成。