如何在python中编写一个函数来添加对应字母的整数?
如何在python中编写一个函数来添加对应字母的整数 例如:如何在python中编写一个函数来添加对应字母的整数?,python,Python,如何在python中编写一个函数来添加对应字母的整数 例如: L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)] 如何通过循环L中的项目来解决此问题?以下是强制性的单行itertools解决方案: >>> import itertools >>> [ ... (k, sum(g[1] for g in group)) ... for k, group in itertools.groupb
L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)]
如何通过循环L中的项目来解决此问题?以下是强制性的单行itertools解决方案:
>>> import itertools
>>> [
... (k, sum(g[1] for g in group))
... for k, group in itertools.groupby(sorted(L), key=lambda x: x[0])
... ]
[('a', 5), ('b', 5), ('c', 7)]
我想最清晰的方法就是循环并把它们加起来
>>> L=[('a',3),('b',4),('c',5),('a',2),('c',2),('b',1)]
>>> import collections
>>> d=collections.defaultdict(int)
>>> for key,n in L:
... d[key] += n
...
>>> sorted(d.items())
[('a', 5), ('b', 5), ('c', 7)]
您可以使用字典来添加重复的键值,就像这样
dict = {}
for i in L:
if i[0] in dict:
dict[i[0]] += i[1]
else:
dict[i[0]] = i[1]
dict.items()
输出将是:[('a',5),('c',7),('b',5)]您可以尝试定义如下函数:
def sorting(L):
dit = {}
result = []
for l in L :
dit[l[0]]= 0
for key , item in dit.items():
for ll in L :
if key == ll[0] :
dit[key] += ll[1]
for key , item in dit.items():
result.append((key , item))
return sorted(result)
您将看到结果:
>>> sorting(L)
[('a', 5), ('b', 5), ('c', 7)]
你试了什么,你卡在哪里了?@thg:我在测试前发了帖子,犯了一个错误,我显然因此受到了处罚。并且需要
键=lambda x:x[0]
。你得到[(('a',2),2),('a',3),3),('b',1),('b',4),4),('c',2),2),('c',5),5)]
如果没有它,首先你对它进行排序,然后你对它进行分组,为每个元素调用lambda,然后你再次对它进行迭代以求和,再加上需要几分钟来计算出后面发生了什么。有一种标准的方法可以做到这一点。@bereal:这里的迭代很慢,而且只迭代一次(除了初始排序)。可能更喜欢collection.Counter
,因为它还免费提供Counter.most_common()
。