Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_List_Sum_Tuples - Fatal编程技术网

Python 按键列表中存储为键值对的元组的和值

Python 按键列表中存储为键值对的元组的和值,python,list,sum,tuples,Python,List,Sum,Tuples,我有一个类似于[a',2,'a',3,'b',3,'c',2,'b',4]的列表 我想对所有相似的键求和,得到['a',5,'c',2,'b',7],任何顺序都可以 有没有比使用字典更好的方法呢。最好使用列表理解,比如[i代表j,a代表…] 在Python-3中,最后一行需要listzipd.keys、d.values,这在列表理解中也是可行的,尽管您的方法似乎很好,并且始终使用列表理解没有固有的好处。IMHO说,在没有进一步问题的情况下,为一行或两行额外的代码而烦恼是徒劳的。如果您希望进一步添

我有一个类似于[a',2,'a',3,'b',3,'c',2,'b',4]的列表

我想对所有相似的键求和,得到['a',5,'c',2,'b',7],任何顺序都可以

有没有比使用字典更好的方法呢。最好使用列表理解,比如[i代表j,a代表…]


在Python-3中,最后一行需要listzipd.keys、d.values,这在列表理解中也是可行的,尽管您的方法似乎很好,并且始终使用列表理解没有固有的好处。IMHO说,在没有进一步问题的情况下,为一行或两行额外的代码而烦恼是徒劳的。如果您希望进一步添加到任何计数中,将此结果作为字典而不是列表来维护也是有意义的-字典是更合适的结构

使用itertools.groupby方法,可以根据第一个元组元素对排序后的组求和

from itertools import groupby
from operator import itemgetter

my_list = [('a',2),('a',3),('b',3),('c',2),('b',4)]
first = itemgetter(0)
sums = [(k, sum(item[1] for item in tups_to_sum))
        for k, tups_to_sum in groupby(sorted(my_list, key=first), key=first)]
产出:

这显然也会起作用,也许更适合作为字典理解

{(k, sum(item[1] for item in tups_to_sum))
            for k, tups_to_sum in groupby(sorted(my_list, key=first), key=first)}

这在列表理解中是可行的,尽管您的方法似乎很好,并且始终使用列表理解并没有固有的好处。IMHO说,在没有进一步问题的情况下,为一行或两行额外的代码而烦恼是徒劳的。如果您希望进一步添加到任何计数中,将此结果作为字典而不是列表来维护也是有意义的-字典是更合适的结构

使用itertools.groupby方法,可以根据第一个元组元素对排序后的组求和

from itertools import groupby
from operator import itemgetter

my_list = [('a',2),('a',3),('b',3),('c',2),('b',4)]
first = itemgetter(0)
sums = [(k, sum(item[1] for item in tups_to_sum))
        for k, tups_to_sum in groupby(sorted(my_list, key=first), key=first)]
产出:

这显然也会起作用,也许更适合作为字典理解

{(k, sum(item[1] for item in tups_to_sum))
            for k, tups_to_sum in groupby(sorted(my_list, key=first), key=first)}

有什么原因要特别使用列表理解吗?@JRodDynamite我希望代码减少行数。有人不喜欢在这里看到很多代码。在可读性方面,在我看来,你上面写的代码似乎是最好的选择。也许你可以把它写在一个单独的函数中,来分离逻辑。它只会减少当前函数中的行数。有什么原因要专门使用列表理解吗?@JRodDynamite我希望代码减少行数。有人不喜欢在这里看到很多代码。在可读性方面,在我看来,你上面写的代码似乎是最好的选择。也许你可以把它写在一个单独的函数中,来分离逻辑。它只会减少当前函数中的行数。