在Python中匹配和组合多个2D列表

2024-10-02 00:39:16 发布

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

我试图结合(2)二维列表基于一个共同的值在两个列表。在

列表中的值是唯一的,因此对于具有相同值的列表项,没有什么可考虑的。在

例如:

list1 = [['hdisk37', '00f7e0b88577106a']]
list2 = [['1', '00f7e0b8cee02cd6'], ['2', '00f7e0b88577106a']]

预期结果为:

^{pr2}$

公共值在list1[0][1]和list2[1][1]处。在


Tags: 列表list2list1pr2hdisk37
3条回答

使用set对象获得所需结果的python方法:

list1 = [['hdisk37', '00f7e0b88577106a']]
list2 = [['1', '00f7e0b8cee02cd6'], ['2', '00f7e0b88577106a']]

set1 = set(list1[0])
list3 = [list(set1 | s) for s in map(set, list2) if set1 & s]
print(list3)

输出:

^{pr2}$
  • set1 & s是两个集合的交集(返回一个新集合,其元素与第一个集合和所有其他集合相同)

  • set1 | s是指定集的并集

试试这个:

result = []
for inner_list1 in list1:
    for inner_list2 in list2:
        set1 = set(inner_list1)
        set2 = set(inner_list1)
        if set1.intersection(set2):
            result.append(list(set1.union(set2)))

对于两个列表中的每个内部列表,检查它们之间的交集是否不为空。如果不是,则将它们合并并添加到最终结果中。在

此方法以dict形式返回所有可能的“second value”匹配,从第二个值返回到结果列表。它还需要任意数量的列表(而不是两个)。在

import collections

a = [['hdisk37', '00f7e0b88577106a']]
b = [['1', '00f7e0b8cee02cd6'], ['2', '00f7e0b88577106a']]

def combine(*lols): # list of lists
  ret = collections.defaultdict(set)
  for lol in lols:
    for l in lol:
      ret[l[1]].add(l[1])
      ret[l[1]].add(l[0])
  return {k:list(v) for k,v in ret.items()}

print combine(a,b)

输出:

^{pr2}$

要获得所需的精确输出,您需要执行以下操作:

combine(list1, list2).get('00f7e0b88577106a')

相关问题 更多 >

    热门问题