3 回答

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

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
你所有的列表都是同一個(gè)對(duì)象。[]
只是一個(gè)文字表達(dá)式,在傳遞給dict.fromkeys
. 該函數(shù)如何知道如何復(fù)制任何隨機(jī)對(duì)象?
如果您想要這種行為,請(qǐng)選擇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)驗(yàn) 獲得超3個(gè)贊
在 fromkeys 中,如果提供的值是可變的(如列表),則每個(gè)鍵的值將是對(duì)同一對(duì)象的引用,因此所有值都會(huì)立即更新。您可以通過(guò)附加到原始列表來(lái)測(cè)試這一點(diǎn),以產(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)
添加回答
舉報(bào)