我使用的是Python 3.6.4。我在列表中有多个列表,但是对于某些元素使用相同的键(内部列表的第一个元素):
[[1, 100],
[1, 250],
[2, 340],
[2, 5200]]
元素0
对于前2个内部列表是相同的。如何通过相同的键将它们组合到一个列表中以获得如下内容:
[[1, 100, 250],
[2, 340, 5200]]
在我的情况下,相同键的最大计数总是两个。
答案 0 :(得分:1)
一种解决方案是使用collections.defaultdict
来迭代列表列表。
然后使用列表推导来转换字典。
from collections import defaultdict
lst = [[1, 100],
[1, 250],
[2, 340],
[2, 5200]]
d = defaultdict(list)
for i, j in lst:
d[i].append(j)
res = [[k]+v for k, v in d.items()]
结果:
[[1, 100, 250],
[2, 340, 5200]]
答案 1 :(得分:0)
default_dict = {}
for val_list in data:
key, value = val_list
default_dict.setdefault(key, []).append(value)
print(*[[key, *value] for key, value in default_dict.items()], sep="\n")
答案 2 :(得分:0)
或类似的东西:
lst=[[1, 100], [1, 250], [2, 340], [2, 5200]]
d={}
for l in lst:
if l[0] in d:
d[l[0]]=[d[l[0]], l[1]]
else:
d[l[0]]=l[1]
out=[]
for k,v in d.items():
v.insert(0, k)
out.append(v)
结果:
print(out)
[[1, 100, 250], [2, 340, 5200]]
答案 3 :(得分:0)
您可以通过一个循环实现自己的逻辑:
data=[[1, 100],
[1, 250],
[2, 340],
[2, 5200]]
combine={}
for i in data:
if i[0] not in combine:
combine[i[0]]=[i[1]]
else:
combine[i[0]].append(i[1])
print(list(map(lambda x:[x,*combine[x]],combine.keys())))
输出:
[[1, 100, 250], [2, 340, 5200]]