Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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,因此,我得到了一份清单: list2=['A','0'],['B','1'],['B','4'],['B','2'],['B','0'],['C','0'],['C','1'],['C','2'],['D','3'],['D','0'] 如果子列表中的第一项相同,我需要添加第二项。怎么做 result expected:[['A', 0],['B',7],['C',3],['D',5]] 使用dict存储列表第一项的计数使用集合: from collections import default

因此,我得到了一份清单:

list2=['A','0'],['B','1'],['B','4'],['B','2'],['B','0'],['C','0'],['C','1'],['C','2'],['D','3'],['D','0']

如果子列表中的第一项相同,我需要添加第二项。怎么做

result expected:[['A', 0],['B',7],['C',3],['D',5]]
使用dict存储列表第一项的计数使用集合:

from collections import defaultdict
from operator import itemgetter

list2= [['A', '0'], ['B', '1'], ['B', '4'], ['B', '2'], ['B', '0'], ['C', '0'], ['C', '1'], ['C', '2'], ['D', '2'], ['D', '3'], ['D', '0']]

result = defaultdict(int)
for item in list2:
    a, value = item
    result[(a)] += int(value)
print(sorted([[a, total] for a,total in result.items()], key=itemgetter(0)))
让,

作为输入

您可以使用operator模块中的itemgetter获取所有字符,set()将获取唯一的元素

有了它,您就可以遍历列表2来匹配每个唯一的字符,并对结果列表求和

>>> from operator import itemgetter
>>> [(c,sum([int(val) for st,val in list2 if st==c])) for c in set(map(itemgetter(0),list2))]
[('A', 0), ('C', 3), ('B', 7), ('D', 5)]
分解代码

>>> map(itemgetter(0),list2)
['A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D']
>>> set(map(itemgetter(0),list2))
set(['A', 'C', 'B', 'D'])
>>> [(c,sum([int(val) for st,val in list2 if st==c])) for c in set(map(itemgetter(0),list2))]
[('A', 0), ('C', 3), ('B', 7), ('D', 5)]

添加一个项目是如何产生一个较短的列表的?只需在列表上循环并使用默认键值创建一个字典,如果键值不存在或者是第一次添加的…这不是添加一个项目。假设每个子列表中的第二项都是分数,字母('a','B','C','D')是一个人。。结果应该是每个人的总分的子列表。例如:我们从['B',1+4+2+0]中得到了['B',7],您可以使用
collections.Counter
(尽管它将丢弃
0
值)
>>> from operator import itemgetter
>>> [(c,sum([int(val) for st,val in list2 if st==c])) for c in set(map(itemgetter(0),list2))]
[('A', 0), ('C', 3), ('B', 7), ('D', 5)]
>>> map(itemgetter(0),list2)
['A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D']
>>> set(map(itemgetter(0),list2))
set(['A', 'C', 'B', 'D'])
>>> [(c,sum([int(val) for st,val in list2 if st==c])) for c in set(map(itemgetter(0),list2))]
[('A', 0), ('C', 3), ('B', 7), ('D', 5)]