使用python对同一个键列表中的多个值求和
我有一个列表,如下所示:使用python对同一个键列表中的多个值求和,python,list,Python,List,我有一个列表,如下所示: (151258350, 2464) (151258350, 56) (151262958, 56) (151258350, 56) (151262958, 112) (151262958, 112) (151259627, 56) (151262958, 112) (151262958, 56) 151259627 56 151262958 448 151258350 2576 我想要的结果如下所示: (151258350, 2464) (151258350, 56
(151258350, 2464)
(151258350, 56)
(151262958, 56)
(151258350, 56)
(151262958, 112)
(151262958, 112)
(151259627, 56)
(151262958, 112)
(151262958, 56)
151259627 56
151262958 448
151258350 2576
我想要的结果如下所示:
(151258350, 2464)
(151258350, 56)
(151262958, 56)
(151258350, 56)
(151262958, 112)
(151262958, 112)
(151259627, 56)
(151262958, 112)
(151262958, 56)
151259627 56
151262958 448
151258350 2576
这是我的代码:
for key, vals in d.items():
tempList.append((key, reduce(add, vals)))
这里,d是带有键值对的列表。tempList是值按键求和后将附加到其中的列表。add是一个函数:
def add(x, y): return x+y
如果已经问过这个问题,请告诉我,因为我自己找不到。您可以使用计数器
第二部分
如果你觉得“Animesh”的答案很有趣,你可以用一种更简单的方式来尝试:这将不需要任何导入。不使用.get()
使用:
最简单的方法是使用
如果您的
source
实际上是一个dict(而不是您在问题中描述的元组列表),请将替换为作为键,源代码中的值:
,替换为作为键,源代码中的值。iteritems()
r = dict(set((a, sum(y for x, y in t if x == a)) for a, b in t))
什么是d
?什么是圣殿骑士?什么是添加?问题是什么?d.items()
?看起来你有一本字典,但你说你有一个列表?@juanchopanza-为你的问题补充了澄清。谢谢你停下来问这个琐碎的问题,并留下你的评论。这些问题是由那些仍然是脚本语言初学者的人提出的。@Nir是编程语言的初学者不是问题。它是关于提出清晰、简洁的问题,而不必让别人猜测你。@juanchopanza,谢谢你的提示。这是额外的学习:-)不要做dict.get(key)
检查字典中是否存在密钥。使用key-in-dict
。key-in-dict
比dict.get
有什么好处?dict.get(key)
返回值(dict[key]
),如果键存在,则返回值;如果键不存在,则返回None
作为回退值。它实际上并不检查字典中是否存在该键。例如,对于字典d={'foo':None,'bar':0}
,这两个键都不会报告为字典中存在(因为d['foo']
是None
,并且d['foo']
返回一个伪值)。能否粘贴num_list
?字典中的键在设计上是唯一的,因此,在cnt[key]
上执行+=
是不必要的,因为如果您在字典d
上迭代,该键将不存在。如果你有一个字典作为基础,你只需要做Counter(d)
就可以从中创建一个计数器。但由于OP有多个相同的“键”,我不相信他们有字典,我现在已经编辑过了。。。但是现在它看起来像是你的代码…谢谢你指出了一个错误,source
不能是字典,因为OP在字典中有多个相同的键,键应该是唯一的。除此之外,答案是非常好的,所以我不知道为什么这会被否决…@poke这个问题有点不清楚,由于代码OP清楚地使用了项
,它出现在dicts上,但不在列表上。。。这个问题并没有提到它会导致的属性错误。所以我把这两种方法都包括在内。截至downvote——可能有人没有仔细阅读答案:)
result = defaultdict(int)
for key, value in source:
result[key] += value
# if you really want result as a list of tuples
rslt = list(result.items())
num_list = [(151258350, 2464),
(151258350, 56),
(151262958, 56),
(151258350, 56),
(151262958, 112),
(151262958, 112),
(151259627, 56),
(151262958, 112),
(151262958,56)]
num_dict = {}
for t in num_list:
if t[0] in num_dict:
num_dict[t[0]] = num_dict[t[0]]+t[1]
else:
num_dict[t[0]] = t[1]
for key,value in num_dict.items():
print "%d %d" %(key,value)
r = dict(set((a, sum(y for x, y in t if x == a)) for a, b in t))