Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一些未添加到词典中的条目_Python_Dictionary - Fatal编程技术网

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()}