3 回答

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

TA貢獻1851條經驗 獲得超4個贊
你所有的列表都是同一個對象。[]
只是一個文字表達式,在傳遞給dict.fromkeys
. 該函數如何知道如何復制任何隨機對象?
如果您想要這種行為,請選擇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貢獻1828條經驗 獲得超3個贊
在 fromkeys 中,如果提供的值是可變的(如列表),則每個鍵的值將是對同一對象的引用,因此所有值都會立即更新。您可以通過附加到原始列表來測試這一點,以產生與您得到的結果相同的結果:
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)
添加回答
舉報