Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中编写一个函数来添加对应字母的整数?_Python - Fatal编程技术网

如何在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

如何在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.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()