我想“缩短”以下列表:
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)
有人可以帮助我吗? 非常感谢!
答案 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