在嵌套lis中添加“值”

2024-04-18 23:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想“缩短”以下列表:

list = [['a', '1'], ['a', '1'], ['a', '1'], ['b', '2'], ['c', '3']]

对此:

list = [['a', '3'], ['b', '2'], ['c', '3']]

我正试着做如下的事情,但没有成功:-(

output_list = []

for item in list:
    if not any((output_list[0] == item[0]) for animal in output_list):
        output_list.append([item[0], item[1]])
    else
        ...??
print(output_list)

有人能帮我吗? 谢谢!你知道吗


Tags: in列表foroutputifnotanyitem
3条回答

一个想法是使用dict然后转换回list

res = {}

for sub_list in list:
    if sub_list[0] in res:
        res[sub_list[0]] += sub_list[1]
    else:
        res[sub_list[0]] = sub_list[1]
list = [[k, v] for k,v in res.items()]
my_list = [['a', '1'], ['a', '1'], ['a', '1'], ['b', '2'], ['c', '3']]

列表理解:

[[letter, str(sum([int(l[-1]) for l in my_list if l[0] == letter]))] for letter in {l[0] for l in my_list} ]

输出:

>>[['a', '3'], ['b', '2'], ['c', '3']]

您可以将列表作为键-值对进行迭代,并使用中间dict不断将值作为整数添加到键中,然后将dict项转换回具有列表理解的列表:

d = {}
for k, v in lst:
    d[k] = d.get(k, 0) + int(v)
output_list = [[k, str(v)] for k, v in d.items()]

output_list变成:

[['a', '3'], ['b', '2'], ['c', '3']]

相关问题 更多 >