如何将2个嵌套列表映射到字典中的相同键?



我有两个嵌套列表:

list1: [[1,2,3],[4,6],[44,77,86]]
list2: [[1,3],[4,6],[44,77,86],[65]]

如何映射它们,使两个大列表中的每个列表都有一个键,并且在其他列表中具有完全相同的键?

dic1: [{0,[1,2,3]},{1,[4,6]},{2,[44,77,86]}]
dic1: [{4,[1,3]},{1,[4,6]},{2,[44,77,86]},{3,[65]}]

您可以看到两个大列表中间的两个列表是相同的-因此,它们在字典中具有相同的键。

dic1不是合法的python对象。但是如果你想实现相同的逻辑:

首先,让我们给list1中的每个列表一个索引:

lookup_table = {}
for key, l in enumerate(list1):
lookup_table[tuple(l)] = key
# lookup_table = {(1, 2, 3): 0, (4, 6): 1, (44, 77, 86): 2}

注意,lookup_table实际上是dic1。

现在,让我们构建dic2:

dict2 = {}
counter = len(list1)

for key, l in enumerate(list2):
if tuple(l) in lookup_table:
dict2[tuple(l)] = lookup_table[tuple(l)]
else:
dict2[tuple(l)] = counter
counter += 1
# dic2 = {(1, 3): 3, (4, 6): 1, (44, 77, 86): 2, (65,): 4}

我假设如果列表在list1中不存在,键是某个计数器。

如果你想在列表的字典中得到映射,你可以转换dic2:

dic2 = [{key: list(l)} for l, key in dict2.items()]
# dic2 = [{3: [1, 3]}, {1: [4, 6]}, {2: [44, 77, 86]}, {4: [65]}]

和dic1相同。

您不需要查找表。您可以直接使用list1检查重复:

list1 = [[1, 2, 3], [4, 6], [44, 77, 86]]
list2 = [[1, 3], [4, 6], [44, 77, 86], [65]]

dict1 = {}
for key, l in enumerate(list1):
dict1[key] = l
n = len(list1)
dict2 = {}
for l in list2:
if l in list1:
dict2[list1.index(l)] = l
else:
dict2[n] = l
n += 1

我认为这是最简单的解决方法

最新更新