From a dataframe
, I build a dictionary
that has as keys
each distinct value from a given column.
The value of each key is a nested dictionary, being the key the distinct values from another column.
The Values in the nested dictionary will be updated by iterating a dataframe (third column).
Example:
import pandas as pd
data = [['computer',1, 10]
,['computer',2,20]
,['computer',4, 40]
,['laptop',1, 100]
,['laptop',3, 30]
,['printer',2, 200]
]
df = pd.DataFrame(data,columns=['Product','id', 'qtt'])
print (df)
Product | id | qtt |
---|---|---|
computer | 1 | 10 |
computer | 2 | 20 |
computer | 4 | 40 |
laptop | 1 | 100 |
laptop | 3 | 30 |
printer | 2 | 200 |
kdf_key_dic = {key: None for key in df['id'].unique().tolist()}
product_key_dic = {key: kdf_key_dic for key in df['Product'].unique().tolist()}
print ("product_key_dic: ", product_key_dic)
product_key_dic: { 'computer': {1: None, 2: None, 4: None, 3: None}, 'laptop': {1: None, 2: None, 4: None, 3: None}, 'printer': {1: None, 2: None, 4: None, 3: None} }
Now I'd like to update the product_key_dic
dictionary, but I can't get it right, it always uses the same key-dict for each key in the main dictionary!
for index, row in df.iterrows():
product_key_dic[row['Product']].update({row['id']:row['qtt']})
print("\n product_key_dic:\n", product_key_dic)
I get:
product_key_dic: { 'computer': {1: 100, 2: 200, 4: 40, 3: 30}, 'laptop': {1: 100, 2: 200, 4: 40, 3: 30}, 'printer': {1: 100, 2: 200, 4: 40, 3: 30} }
I expect:
{ 'computer': {1: 10, 2: 20, 4: 40, 3: None}, 'laptop': {1: 100, 2: None, 4: None, 3: 30}, 'printer': {1: None, 2: 200, 4: None, 3: None} }
I can't understand the problem, somehow it's like each key has the nested dictoinary..?