Ad

Nested Dictonary Is Not Updating As Required

- 1 answer

I'm trying to create a nested dictionary which has sub-dictionary keys as the remaining elements of the list. To explain it in a simpler way:

Required output:

payable = { 'A':{'B':0,'C':0},'B':{'A':0,'C':0}....}

Output:

payable = { 'A':{'B':0,'C':0,'A':0},'B':{'A':0,'C':0,'B':0}....}

I don't need the'A'sub-key under the'A'main-key. How can I fix this?

names = ['A', 'B', 'C']  
payable = dict.fromkeys(names, {})  
for mainKey in payable.keys():
    for subKey in names:
        if(mainKey != subKey):
            payable[mainKey][subKey] = 0 
print(payable) 
Ad

Answer

When you create using dict.fromkeys, all the keys are looking at the same dict.

Try creating payable with dict comprehension (in other words, new dict for each key) and it works fine:

names = ['A','B','C']  
payable= {k:{} for k in names}
for mainKey in payable.keys():
    for subKey in names:
        if(mainKey!=subKey):
            payable[mainKey][subKey]=0 
print(payable) 

Output:

{'A': {'B': 0, 'C': 0}, 'B': {'A': 0, 'C': 0}, 'C': {'A': 0, 'B': 0}}
Ad
source: stackoverflow.com
Ad