Python 如何使用每个列表的第一个元素作为键将多个列表合并为一个列表?
我使用Python 3.6.4。我在一个列表中有多个列表,但对于某些元素具有相同的键(内部列表的第一个元素):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],
[[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应该澄清一下。