有人可以为我解释这种行为吗?
mapping = dict.fromkeys([1, 2, 3], [])
objects = [{'pk': 1}, {'pk': 2}, {'pk': 3}]
for obj in objects:
pk = obj['pk']
mapping[pk].append(obj)
print mapping
# expected: {1: [{'pk': 1}], 2: [{'pk': 2}], 3: [{'pk': 3}]}
# got: {1: [{'pk': 1}, {'pk': 2}, {'pk': 3}], 2: [{'pk': 1}, {'pk': 2}, {'pk': 3}], 3: [{'pk': 1}, {'pk': 2}, {'pk': 3}]}
Run Code Online (Sandbox Code Playgroud)
我试图将dicts映射objects到另一个dict,其键是原始字典的属性.假设objects列表包含每个唯一PK的几个对象(我不仅仅map在这里使用的原因).
那是因为:
mapping = dict.fromkeys([1, 2, 3], [])
Run Code Online (Sandbox Code Playgroud)
[]被评估一次,因此每个键具有与值相同的列表.请尝试使用collections.defaultdict.