在python中对两个列表进行分组

2024-05-16 22:57:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,我想根据列表的第一个元素分组。在

list1 = [['1','abc','zef'],['2','qwerty','opo'],['3','lol','pop']]

list2 = [['1','rofl','pole'],['2','sole','pop'],['3','lmao','wtf']]

在这里,列表中的第一个元素是“1”、“2”和“3”。在

我希望我的最终名单是:

^{pr2}$

我已经用下面的代码试过了。在

#!/usr/bin/python
list1 = [['1','abc','zef'],['2','qwerty','opo'],['3','lol','pop']]
list2 = [['1','rofl','pole'],['2','sole','pop'],['3','lmao','wtf']]
d = {}
for i in list1:
    d[i[0]] = i[1:]
for i in list2:
    d[i[0]].extend(i[1:])
Final_List = []
for key, value in d.iteritems():
    value.insert(0,key)
   Final_List.append(value)

这段代码可以工作,但我想知道是否有一种简单明了的方法来实现它

有什么帮助吗?在


Tags: in元素列表forvaluepopabclol
3条回答

如果Final_List内列表中的项序列不重要,则可以使用此项

[list(set(sum(itm, []))) for itm in zip(list1, list2)]

我会像你写的那样稍加修改,像这样

  1. 准备一个字典,其中从第二个位置收集的所有元素对应于第一个元素。在

    d = {}
    for items in (list1, list2):
        for item in items:
            d.setdefault(item[0], [item[0]]).extend(item[1:])
    
  2. 然后从字典中获取所有值(谢谢@jamylak):-)

    print(d.values())
    

输出

[['3', 'lol', 'pop', 'lmao', 'wtf'],
 ['1', 'abc', 'zef', 'rofl', 'pole'],
 ['2', 'qwerty', 'opo', 'sole', 'pop']]

你的代码似乎是正确的。只需修改以下部分:

Final_List = []    
for key in d:
    L = [key] + [x for x in d[key]]
    Final_List.append(L)

相关问题 更多 >