在嵌套列表中添加“值”

时间:2019-09-09 21:00:42

标签: python list

我想“缩短”以下列表:

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)

有人可以帮助我吗? 非常感谢!

5 个答案:

答案 0 :(得分:1)

您可以将列表作为键值对进行迭代,并使用中间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']]

答案 1 :(得分:0)

一个想法是使用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()]

答案 2 :(得分:0)

有一个特殊的标准库函数可以完成类似的工作,它称为itertools.groupby

groupby按某种标准对列表元素进行分组。总和有点笨拙,因为您的数字实际上是字符串,需要转换为整数。

from itertools import groupby
from operator import itemgetter


compacted_data = []
data = sorted(data, itemgetter(0))  # sort by the first element of list
for k, g in groupby(data, itemgetter(0)):
    compacted_data.append([k, sum(map(lambda x -> int(x[2]), g))      # 

一个受欢迎的熊猫包装 提供更好的“工业实力”分组依据,请访问

了解有关熊猫的更多信息

https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/ https://datascience.stackexchange.com/questions/26333/convert-a-list-of-lists-into-a-pandas-dataframe

答案 3 :(得分:0)

尝试这个:

>>> list_ = [['a', '1'], ['a', '1'], ['a', '1'], ['b', '2'], ['c', '3']]
>>> from itertools import groupby
>>> [[k,sum([int(el[1]) for el in v])] for k, v in groupby(list_, key=lambda x: x[0])]
[['a', 3], ['b', 2], ['c', 3]]

答案 4 :(得分:-1)

List

列表理解:

Bitmaps

输出:

onPostExecute