3 回答

TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
我怎么知道這是行為
Python 文檔說明了這一點并警告您:
來自keys的類方法(可迭代[,值])
創(chuàng)建一個新字典,其中鍵來自可迭代,值設(shè)置為value。
fromkeys()
是一個返回新字典的類方法。值默認(rèn)為None
. 所有的值都只引用一個實例,因此value是一個可變對象(例如空列表)通常是沒有意義的。要獲得不同的值,請改用 dict 理解。

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊
你所有的列表都是同一個對象。[]
只是一個文字表達(dá)式,在傳遞給dict.fromkeys
. 該函數(shù)如何知道如何復(fù)制任何隨機(jī)對象?
如果您想要這種行為,請選擇collections.defaultdict
:
from collections import defaultdict
def solution(A):
d = defaultdict(list) # `list` is a factory funtion that can be called repeatedly
for i in range(len(A)):
d[A[i]].append(i)
print(d)
# or, if you dislike the output (note, it is a dict already)
# print(dict(d))

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
在 fromkeys 中,如果提供的值是可變的(如列表),則每個鍵的值將是對同一對象的引用,因此所有值都會立即更新。您可以通過附加到原始列表來測試這一點,以產(chǎn)生與您得到的結(jié)果相同的結(jié)果:
def solution(A):
lst = []
d = dict.fromkeys(set(A), lst)
for i in range(len(A)):
lst.append(i)
print(d)
除了提供的其他答案外,您還可以使用字典理解路線:
def solution(A):
d = { key : [] for key in A }
for i in range(len(A)):
d[A[i]].append(i)
print(d)
添加回答
舉報