按公共元素列出的Python合并列表

2024-09-30 16:27:06 发布

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

我试图合并两个列表,它们之间有一个共同点(在这种情况下是一个id参数)。 我有这样的东西:

list1=[(id1,host1),(id2,host2),(id1,host5),(id3,host4),(id4,host6),(id5,host8)]

list2=[(id1,IP1),(id2,IP2),(id3,IP3),(id4,IP4),(id5,IP5)]

主机是唯一的,但是list1中的id可以像您看到的那样重复。 我想要一个与id参数相关的输出,这是两个列表的共同点:

一些输出如:

IP1(host1,host5), IP2(host2), IP3(host4), IP4(host6), IP5(host8)

如您所见,IP1有两个主机关联。在

有什么快速的方法吗?在

谢谢你


Tags: id列表参数id3id2id1list1共同点
3条回答

代码:

list1=[('id1','host1'),('id2','host2'),('id1','host5'),('id3','host4'),('id4','host6'),('id5','host8')]
list1 = map(list,list1)
list2=[('id1','IP1'),('id2','IP2'),('id3','IP3'),('id4','IP4'),('id5','IP5')]
list2 = map(list,list2)

for item in list1:
    item += [x[1] for x in list2 if x[0]==item[0]]

list1 += [x for x in list2 if not any(i for i in list1 if x[0]==i[0])]

print list1

输出:

^{pr2}$

希望这有帮助:)

>>> from collections import defaultdict
>>> list1 = [('id1','host1'),('id2','host2'),('id1','host5'),('id3','host4'),('id4','host6'),('id5','host8')]
>>> list2 = [('id1','IP1'),('id2','IP2'),('id3','IP3'),('id4','IP4'),('id5','IP5')]
>>> d1 = defaultdict(list)
>>> for k,v in list1:
...     d1[k].append(v)
... 

你可以像这样打印项目

^{pr2}$

您可以使用列表理解将结果放入列表中

>>> res = [(s, d1[k]) for k, s in list2]
>>> res
[('IP1', ['host1', 'host5']), ('IP2', ['host2']), ('IP3', ['host4']), ('IP4', ['host6']), ('IP5', ['host8'])]
  1. 使用集合.defaultdict映射id->ip
  2. 然后映射id->ip
>>> d = defaultdict(set)
>>> d['id'].add('host1')
>>> d['id'].add('host2')
>>> d['id'].add('host1')
>>> d
defaultdict(<type 'set'>, {'id': set(['host2', 'host1'])})

相关问题 更多 >