python - 将字典添加到嵌套字典 python
问题描述
我有 3 个节点和 3 种颜色(R、G、B),我试图创建一个包含所有可能的节点和颜色组合的字典(所以它的 3^3 = 27 种可能的组合)应该看起来像
{0: {0: 'R', 1: 'R', 2: 'R'}, 1: {0: 'R', 1: 'R', 2: 'G'}, 3: etc
但我的字典 colorized_nodes 只是不断更新,最后我只剩下最后一个组合。我不明白它有什么问题。我的代码如下所示:
import itertools
colorized_nodes=dict()
colorized=dict()
nodes = [1, 2, 3]
colors = ['R','G','B']
nodes_count=len(nodes)
colors_count=len(colors)
all_combs=nodes_count**colors_count
#all possible combinations of colors
comb=itertools.product(colors, repeat=colors_count)
allcombs=list(comb)
for i in range (all_combs):
for index,color in enumerate(allcombs[i]):
colorized[index]=color
colorized_nodes={**colorized_nodes, **colorized}
print(colorized_nodes)
colorized={}
print('checkpoint')
print(colorized_nodes)
解决方案
你的代码总是只使用一个键来存储东西——你可以通过使用来简化你的代码enumerate
:
#all possible combinations of colors
comb=itertools.product(colors, repeat=colors_count)
allcombs=list(comb)
# see below for loop-equivalent
cols = {i:{ii:vv for ii,vv in enumerate(v)} for i,v in enumerate(allcombs)}
print(cols)
输出:
{0: {0: 'R', 1: 'R', 2: 'R'}, 1: {0: 'R', 1: 'R', 2: 'G'}, 2: {0: 'R', 1: 'R', 2: 'B'},
3: {0: 'R', 1: 'G', 2: 'R'}, 4: {0: 'R', 1: 'G', 2: 'G'}, 5: {0: 'R', 1: 'G', 2: 'B'},
6: {0: 'R', 1: 'B', 2: 'R'}, 7: {0: 'R', 1: 'B', 2: 'G'}, 8: {0: 'R', 1: 'B', 2: 'B'},
9: {0: 'G', 1: 'R', 2: 'R'},10: {0: 'G', 1: 'R', 2: 'G'},11: {0: 'G', 1: 'R', 2: 'B'},
12: {0: 'G', 1: 'G', 2: 'R'},13: {0: 'G', 1: 'G', 2: 'G'},14: {0: 'G', 1: 'G', 2: 'B'},
15: {0: 'G', 1: 'B', 2: 'R'},16: {0: 'G', 1: 'B', 2: 'G'},17: {0: 'G', 1: 'B', 2: 'B'},
18: {0: 'B', 1: 'R', 2: 'R'},19: {0: 'B', 1: 'R', 2: 'G'},20: {0: 'B', 1: 'R', 2: 'B'},
21: {0: 'B', 1: 'G', 2: 'R'},22: {0: 'B', 1: 'G', 2: 'G'},23: {0: 'B', 1: 'G', 2: 'B'},
24: {0: 'B', 1: 'B', 2: 'R'},25: {0: 'B', 1: 'B', 2: 'G'},26: {0: 'B', 1: 'B', 2: 'B'}}
dict 理解等价于
for idx,part in enumerate(allcombs):
colorized={}
for index, color in enumerate(part):
colorized[index]=color
colorized_nodes[idx]=colorized
推荐阅读
- sql - 将 SQL Server 2016 表移动到另一个数据库并使用原始名称使用同义词访问它
- javascript - React 输入滑块 Hooks
- react-native - React Native SQLite 脚本返回错误:未定义不是对象
- python - 对于使用 LSTM、keras 模型进行分类,我得到 loss = nan 和 accuracy = 0
- javascript - Firebase 可调用函数返回空结果
- python - Whonix 上的 Dh 密钥太小(Python FTP)
- javascript - Javascript将addEventListener内部的JQuery post错误传播到外部
- javascript - 如何在javascript中进行uint32乘法,C使它们
- reactjs - 在 onClick 中实现 If/Else 到单选按钮 - React JS
- python - 如何使用用户输入搜索多个字典/文字