[英]python dynamically create dict of dicts
首先,我無法找到任何建議來解決我的問題以解決我的問題,所以萬一有人已經回復了它,請善意地向我發言。
我正在嘗試“動態”創建由其他詞典組成的字典(這些最后一個是通過json獲得的數據); 無論如何,我想要實現的結果如下:
{
'D2Key1': {'D1Key1': 'Data11', 'D1Key2': 'Data21', 'D1Key3': 'Data31'},
'D2Key2': {'D1Key1': 'Data12', 'D1Key2': 'Data22', 'D1Key3': 'Data32'},
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}
}
我寫的代碼是:
for n in range(3):
D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
D2['%s%d' % ('D2key', n+1)] = D1
我得到的結果是一個填充了三個字典的字典,但它們都具有相同的數據,即上次迭代的數據,換句話說是這樣的:
{
'D2Key1': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'},
'D2Key2': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'},
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}
}
有人可以向我說明正確的方向嗎? 謝謝
是的,如果你這樣做,你必須在每次傳遞后重置D1,否則指針保持不變,並將D2中的所有鍵指向相同的D1。 以下是解決這個問題的方法:
for n in range(3):
D1 = {}
D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
D2['%s%d' % ('D2key', n+1)] = D1
這是一個常見的錯誤。 D2中的每個鍵都被分配給同一個對象D1。 然后你每次迭代都要繼續修改D1。
您希望在每次迭代時分配不同的字典。 將一個D1 = {}
添加到for循環的第一行。
這可能是因為你在for循環中引用了相同的dict D1。 我認為你必須在每次迭代中創建新的dict。 像這樣的東西:
for n in range(3):
D1 = {}
D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
D2['%s%d' % ('D2key', n+1)] = D1
這條線
D2['%s%d' % ('D2key', n+1)] = D1
是錯的。 你總是指向一個可變類型的字典。 您需要先復制結果並將其添加到字典D2中。
嘗試在每個循環中創建新詞典,填充鍵然后將其添加到詞典D2。
for n in range(3):
d1 = {} # notice here this is what you need to add.
d1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
d1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
d1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
d2['%s%d' % ('D2key', n+1)] = d1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.