做一个有两个列表的字典,一个列表包含其他列表的索引

2024-04-19 23:59:01 发布

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

我有两个清单:

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']}

Tags: 元素列表字典firstsecond
2条回答

您可以将字典理解与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']}

似乎您正试图从值列表和邻接列表生成一个图形。你知道吗

我的第一句话是,您的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]

相关问题 更多 >