如何解决一些条目未添加到词典中
我想根据另一个字典的键创建一个字典。 这是我使用的代码:
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”键。 对于您而言,每个键都保留您最后分配给它的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。