Python 一些未添加到词典中的条目
我想根据另一个字典的键创建一个字典。 以下是我使用的代码:Python 一些未添加到词典中的条目,python,dictionary,Python,Dictionary,我想根据另一个字典的键创建一个字典。 以下是我使用的代码: 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'
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', 'k2': 'k3', 'k3': 'k3'}
字典键必须是唯一的。例如,不能有两个“k1”键。
在您的情况下,每个键保留您最后分配给它的值。字典必须包含一组唯一键。这是因为键是散列的,用于查找值。将
defaultdict
与列表
工厂一起使用可能会使您受益匪浅,该工厂实例化为: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', 'k2', 'k3'],
'k3': ['k1', 'k2', 'k3']}
请注意,当我们调用dic2[i].append(j)
时,如果当前键尚未指向要向其追加项目的列表,则defaultdict
将为您创建一个新列表
如果您不想使用defaultdict
,可以使用:
字典必须包含一组唯一键。这是因为键是散列的,用于查找值。使用
defaultdict(list)
可以让一个键指向一个值列表,这对您可能会有好处。@patalvali,因为JacobIRR键是唯一的,所以您看到的是分配给每个键的最后一个值。除了这里的脚本之外,请尝试键入dic2={'k1':'k1'、'k1':'k2'、'k1':'k3'、'k2':'k1'、'k2':'k3'、'k3':'k1'、'k3':'k2'、'k3':'k3'}
然后是打印(dic2)
,看看你得到了什么…谢谢你的评论。有道理。有一点我仍然不明白。为什么保留的是最新条目?保留第一条似乎更符合逻辑(因为其他问题可以被视为重复的钥匙)。不?另一点:这个问题可能与另一个问题重复,但肯定与前面提到的问题不同。(2个非常不同的问题IMHO)
{k: [kk for kk in dic1.keys()] for k in dic1.keys()}