用2个列表制作一个Dictionary,一个列表包含另一个的索引

时间:2019-03-03 23:56:41

标签: python dictionary

我有2个列表:

first = ['33', '44', '55', '66', '77', '88', '99', '22']
second = [['1 6'], ['2 7'], ['3 4'], ['5 0'], 
          ['3'], ['6'], ['0'], ['4 1']]

我想制作一个字典,将第一个列表的值作为键,并且也将第一个列表的值作为元素,将第二个列表的元素作为选择第一个列表的索引列表将作为键中的元素。

因此它必须在末尾看起来像这样:

d = {'33' : ['44', '99'], '44' : ['55', '22'], 
     '55' : ['66', '77'], '66' : ['88', '33'], 
     '77' : ['55'], '88' : ['99'], '99' : ['33'], 
     '22' : ['77', '44']}

2 个答案:

答案 0 :(得分:1)

您可以对zip使用字典理解:

first = ['33', '44', '55', '66', '77', '88', '99', '22']
second = [['1 6'], ['2 7'], ['3 4'], ['5 0'],  ['3'], ['6'], ['0'], ['4 1']]
final_result = {a:[first[i] for i in map(int, b.split())] for a, [b] in zip(first, second)}

输出:

{'33': ['44', '99'], '44': ['55', '22'], '55': ['66', '77'], '66': ['88', '33'], '77': ['66'], '88': ['99'], '99': ['33'], '22': ['77', '44']}

答案 1 :(得分:0)

似乎您正在尝试根据值列表和邻接列表生成图。

我的第一句话是,您的second列表应包含索引列表,而不是包含在列表中的单个字符串。

以第一个条目为例...

['1 6']

...会变成这个。

[1, 6]

请注意,我们现在如何使用int元素来更有意义地表示索引。

切换到这种格式后,您可以更有效地使用dict处理它以生成图形。

示例

first = ['33', '44', '55', '66']
second = [[1, 2], [2, 3], [3], [0]]

graph = {}
for value, indices in zip(first, second):
    graph[value] = [first[i] for i in indices]

输出

# graph
{'33': ['44', '55'],
 '44': ['55', '66'],
 '55': ['66'],
 '66': ['33']
}

转换邻接表

如果您已经提交了second格式的信息,请按以下步骤进行转换。

second = [[int(x) for x in l[0].split()] for l in second]