我正在嘗試創建一個回圈以從Series的字典中填充字典:
預期結果是:
{1: {'KEY Mult. by 10': 10, 'KEY Add by 10': 11},
2: {'KEY Mult. by 10': 20, 'KEY Add by 10': 12},
3: {'KEY Mult. by 10': 30, 'KEY Add by 10': 13},
4: {'KEY Mult. by 10': 40, 'KEY Add by 10': 14},
5: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15}}
我正在做的是:
series_1 = pd.Series([1,2,3,4,5])
first_dict = dict() # creating first level of Dict
second_dict = dict({'KEY Mult. by 10': 0, # creating second level of Dict
'KEY Add by 10': 0})
for i in series_1:
first_dict[i] = second_dict
first_dict[i]['KEY Mult. by 10'] = i *10
first_dict[i]['KEY Add by 10'] = i 10
上面的結果最終是:
{1: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15},
2: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15},
3: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15},
4: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15},
5: {'KEY Mult. by 10': 50, 'KEY Add by 10': 15}}
然后,當我嘗試更改其中一個鍵的值時,它會為所有鍵更改:
first_dict[3]['KEY Mult. by 10'] = 20first_dict
{1: {'KEY Mult. by 10': 20, 'KEY Add by 10': 15},
2: {'KEY Mult. by 10': 20, 'KEY Add by 10': 15},
3: {'KEY Mult. by 10': 20, 'KEY Add by 10': 15},
4: {'KEY Mult. by 10': 20, 'KEY Add by 10': 15},
5: {'KEY Mult. by 10': 20, 'KEY Add by 10': 15}}
任何人都可以幫助我嗎?
uj5u.com熱心網友回復:
一些評論描述了解決方案,但我會詳細說明一些。
字典是每個外部索引中的相同記憶體塊。要在運行后看到這個:
for i in series_1:
first_dict[i] = second_dict
查看id()兩個內部字典的,這些是記憶體位置:
id(first_dict[1]) # 4511987904
id(first_dict[2])
使用當前撰寫代碼的方式,對任何字典的任何寫入都將覆寫所有字典。
在您的機器上,您將有一個(一個)不同的 id 值,但這是相同的想法——它們都是相同的記憶體位置。
要解決此問題,您可以在for 回圈中呼叫建構式,它將為每個內部字典分配新記憶體。
for i in series_1:
first_dict[i] = dict({'KEY Mult. by 10': 0,'KEY Add by 10': 0})
first_dict[i]['KEY Mult. by 10'] = i * 10
first_dict[i]['KEY Add by 10'] = i 10
然后您將看到id()每個內部字典的不同回傳值,您可以通過以下方式確認它們是不同的記憶體位置id():
>>> id(first_dict[3])
4511988352
>>> id(first_dict[1])
4511988160
同樣,在您的機器上,這些將是不同id()的值,但想法是相同的,您分別為每個內部字典騰出空間。
uj5u.com熱心網友回復:
問題是,你多次使用同一個字典,你必須使用副本哦second_dict
import pandas as pd
series_1 = pd.Series([1, 2, 3, 4, 5])
first_dict = dict() # creating first level of Dict
second_dict = dict({'KEY Mult. by 10': 0, # creating second level of Dict
'KEY Add by 10': 0})
for i in series_1:
first_dict[i] = second_dict.copy()
first_dict[i]['KEY Mult. by 10'] = i * 10
first_dict[i]['KEY Add by 10'] = i 10
uj5u.com熱心網友回復:
更改first_dict[i] = second_dict為:first_dict[i] = dict()它將按預期作業,通過這樣做,您還可以洗掉“第二級字典”的創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455465.html
上一篇:為什么輸入未定義?
