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

Python 如何使用每个列表的第一个元素作为键将多个列表合并为一个列表?,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,我使用Python 3.6.4。我在一个列表中有多个列表,但对于某些元素具有相同的键(内部列表的第一个元素): [[1, 100], [1, 250], [2, 340], [2, 5200]] 元素0对于前两个内部列表是相同的。如何通过相同的键将它们组合到一个列表中,以获得如下内容: [[1, 100, 250], [2, 340, 5200]] [[1, 100, 250], [2, 340, 5200]] lst=[[1, 100], [1, 250], [2, 340],

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

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

[[1, 100, 250],
 [2, 340, 5200]]
[[1, 100, 250],
 [2, 340, 5200]]
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)

在我的例子中,相同键的最大计数总是两个。

一个解决方案是使用
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()]
结果:

print(out)
[[1, 100, 250], [2, 340, 5200]]

或者像这样:

[[1, 100, 250],
 [2, 340, 5200]]
[[1, 100, 250],
 [2, 340, 5200]]
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]]

您可以通过一个循环实现自己的逻辑:

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

我不明白。您有两个列表,其中第一个元素相同,是否要合并它们?所以只要
list1+=list2[1:
?好吧,我的错。我想按第一个(
[0]
)元素将两个列表合并到一个列表中。@miradulo,既然已经接受了答案,我就冒昧地为其他用户改进了这个问题。现在应该有意义了。嵌套列表是按第一个元素jpp排序的吗?问题中没有指定,所以我假设没有,但OP应该澄清一下。