ky = ['a','b','c']
val = 15
dict_1 = dict.fromkeys(ky,[])
dict_1['a'].append(val)
dict_2 = {'a':[],'b':[],'c':[]}
dict_2['a'].append(val)
print(dict_1)
print(dict_2)
uj5u.com熱心網友回復:
當您使用時,它們都使用相同的 refdict.fromkeys()對一個的更改是對所有的更改,因為它們是同一個物件
您可以使用 dict 理解而不是附加:
keys = ['a','b','c']
value = [0, 0]
{key: list(value) for key in keys}
{'a': [0, 0], 'b': [0, 0], 'c': [0, 0]}
uj5u.com熱心網友回復:
請糾正我,如果我錯了,但考慮到你的帖子,我假定你的問題是,為什么dict_1擁有其所有鍵相同的值(15) a,b以及c最后的結果吧?
如果是這樣,我同意這是乍一看不直觀的行為,但發生的事情是通過傳遞[](一個空串列)作為該方法的第二個可選引數fromkeys,您正在填充dict_1字典并參考同一個空串列,因此,當您附加val到 key 時a,所有其他鍵也會更新為相同的值(您將空串列作為參考傳遞。請參閱按參考傳遞與按值傳遞之間的區別)。
正如您自己注意到的那樣,還有其他方法可以在 Python 中初始化空串列的字典(就像您使用 dict_2“手動”所做的那樣)。
如果您對在 Python 中初始化空串列字典的另一種“非手動”方式感興趣,您可以使用 alist comprehension來執行此操作,如下例所示:
dict_3 = {k : [] for k in ky}
這將dict_3使用空串列(按值傳遞)進行初始化,因此,當您附加到 key時,keysb和c不會受到影響。vala
我希望這有助于澄清你的例子。親切的問候。
uj5u.com熱心網友回復:
使用dict_1 = dict.fromkeys(ky,[]),所有鍵都映射到同一個(空)陣列。
因此,每當您更改該陣列的內容時,這些鍵中的每一個都將(仍然)指向包含這些新內容的同一個陣列。
uj5u.com熱心網友回復:
dict_1 = dict.fromkeys(ky,[])創建一個串列,然后呼叫fromkeys. 該串列用于與每個鍵配對的值。通過所有鍵參考的一個串列。
如果您想要唯一的串列,請使用字典理解
dict_3 = {k:[] for k in ky}
在這里,k:[]對每個鍵進行評估,并為每個值創建一個新串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/396664.html
上一篇:二維陣列所有元素的所有組合
