问题描述
dic2 = {}
dic1 = {'k1':'v1','k2':'v2','k3':'v3'}
for i in dic1.keys():
for j in dic1.keys():
print (i,j)
dic2[i]=j
print (dic2)
输出:
k1 k1
k1 k2
k1 k3
k2 k1
k2 k2
k2 k3
k3 k1
k3 k2
k3 k3
{'k1': 'k3','k2': 'k3','k3': 'k3'}
为什么所有条目都未添加到词典中?
为什么没有:
dic2 ={'k1':'k1','k1':'k2','k1':'k3','k2':'k1','k2':'k2','k2':'k3','k3':'k1','k3':'k2','k3':'k3'}
但是:
dic2 = {'k1': 'k3','k3': 'k3'}
解决方法
字典必须包含set
个唯一键。这是因为键被散列并用于查找值。您可能会受益于将defaultdict
与list
工厂一起使用,实例化为:defaultdict(list)
,在这里您可以有一个指向值列表的键。
from collections import defaultdict
dic2 = defaultdict(list)
dic1 = {'k1':'v1','k2':'v2','k3':'v3'}
for i in dic1.keys():
for j in dic1.keys():
print (i,j)
dic2[i].append(j)
print (dic2)
结果:
{'k1': ['k1','k2','k3'],'k2': ['k1','k3': ['k1','k3']}
请注意,当我们调用dic2[i].append(j)
时,如果当前键还没有指向要附加项目的列表,则defaultdict
会为您创建一个新列表。
如果您不想使用defaultdict
,则可以使用dictionary comprehension:
{k: [kk for kk in dic1.keys()] for k in dic1.keys()}
,
字典键必须唯一。例如,您不能有两个“ k1”键。 对于您而言,每个键都保留您最后分配给它的值。