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)
添加回答
举报