簡體   English   中英

將字典添加到嵌套字典 python

[英]adding a dictionary to nested dict python

我有 3 個節點和 3 個 colors (R,G,B),我試圖創建一個包含所有可能的節點組合和 colors 的字典(所以它的 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)

Output:

{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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM