首页 > 解决方案 > 通过遍历键列表并与另一个字典配对来使用键值对填充字典

问题描述

给定一个空字典:

matrix={}

另一个list_of_dictionaries

[{(0, 1): 3, (2, 0): 2, (2, 1): 3}, 
{(2, 0): 3, (0, 0): 3, (2, 1): 3}, 
{(0, 1): 3, (0, 0): 2, (2, 1): 1},
{(0, 1): 3, (2, 0): 1, (0, 0): 3}]

我想遍历一个由索引组成的列表:

indices=[(0, 0), (0, 1), (2, 0), (2, 1)]

并填充matrix,因此索引中的每个 i 都是键,而 list_of_dictionaries 中的每个字典都是关联的值。

我已经搜索并且只能找到明确更新和填充字典的方法,但实际上,我不知道我list_of_dictionaries将包含什么,也不知道我的索引将包含什么。说我正在寻找“动态”解决方案是否正确?我知道

matrix.update(x) 

只会采用一个参数(键或值?),但我想要一个同时采用键和值的解决方案。非常感谢。

for i in indices:

结果应返回矩阵,如下所示:

(0, 0):{(0, 1): 3, (2, 0): 2, (2, 1): 3}
(0, 1):{(2, 0): 3, (0, 0): 3, (2, 1): 3}
(2, 0):{(0, 1): 3, (0, 0): 2, (2, 1): 1}
(2, 1):{(0, 1): 3, (2, 0): 1, (0, 0): 3}

标签: pythonpython-3.xdictionary

解决方案


您可以尝试同时zipping 两个列表,然后从中创建一个字典,然后matrix使用该字典进行更新:

matrix = {}
list_of_dictionaries = [{(0, 1): 3, (2, 0): 2, (2, 1): 3}, 
                        {(2, 0): 3, (0, 0): 3, (2, 1): 3}, 
                        {(0, 1): 3, (0, 0): 2, (2, 1): 1},
                        {(0, 1): 3, (2, 0): 1, (0, 0): 3}]
indices = [(0, 0), (0, 1), (2, 0), (2, 1)]

matrix.update(dict(zip(indices, list_of_dictionaries)))
print(matrix)

输出:

{(0, 0): {(0, 1): 3, (2, 0): 2, (2, 1): 3},
 (0, 1): {(2, 0): 3, (0, 0): 3, (2, 1): 3},
 (2, 0): {(0, 1): 3, (0, 0): 2, (2, 1): 1},
 (2, 1): {(0, 1): 3, (2, 0): 1, (0, 0): 3}}

如果必须使用for循环:

for i, d in zip(indices, list_of_dictionaries): 
    matrix[i] = d

推荐阅读