簡體   English   中英

python動態創建dicts的詞典

[英]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.

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