如何使用每个列表的第一个元素作为键将多个列表合并为一个?

时间:2018-03-19 12:41:10

标签: python arrays python-3.x list

我使用的是Python 3.6.4。我在列表中有多个列表,但是对于某些元素使用相同的键(内部列表的第一个元素):

[[1, 100],
 [1, 250],
 [2, 340],
 [2, 5200]]

元素0对于前2个内部列表是相同的。如何通过相同的键将它们组合到一个列表中以获得如下内容:

[[1, 100, 250],
 [2, 340, 5200]]

在我的情况下,相同键的最大计数总是两个。

4 个答案:

答案 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]]