尝试在python中重新映射字典的键时得到keyerror

时间:2015-05-12 20:25:17

标签: python dictionary

我想重新映射或更改字典的键到1,2,3,...,因为键本身有点复杂。在这篇文章之后,How do I re-map python dict keys 这就是我做的。

tmp=0
for keys in population.items():
        tmp+=1
        population[tmp]=population.pop(keys)

但是,我得到了keyerrors,这通常意味着密钥不存在。有人可以帮我吗? PS。我对字典填充项进行了随机抽样。所以我不确定字典群的关键是什么。

编辑:我改变了代码。然后它适用于一个小的数据集,而它不适用于大型数据集。我添加了以下代码。

for keys, vs in population.items():
        print str(keys)+ "corresponding to" + str(vs)

Here is what I got:
1024corresponding to10
7corresponding to2
855corresponding to4
13corresponding to310
686corresponding to6
22corresponding to172
24corresponding to214
25corresponding to62
26corresponding to18
28corresponding to9
29corresponding to435
30corresponding to210
32corresponding to243
34corresponding to450
859corresponding to8
37corresponding to1
689corresponding to3
43corresponding to53
46corresponding to8
47corresponding to2
48corresponding to7
52corresponding to254
54corresponding to441
820corresponding to3
57corresponding to19
59corresponding to9
61corresponding to3
63corresponding to1
65corresponding to1
66corresponding to6
(0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0)corresponding to7
68corresponding to46842
73corresponding to8
74corresponding to513
75corresponding to52
866corresponding to10
79corresponding to5
80corresponding to712
81corresponding to1
82corresponding to118
83corresponding to15
84corresponding to9
87corresponding to1
88corresponding to7
868corresponding to24
93corresponding to133
94corresponding to9
97corresponding to355
98corresponding to10
99corresponding to9
101corresponding to1
103corresponding to93
114corresponding to3
702corresponding to5
119corresponding to1
121corresponding to1
123corresponding to5
124corresponding to3
125corresponding to3
819corresponding to5
127corresponding to8
131corresponding to137
133corresponding to3
138corresponding to145
139corresponding to3
142corresponding to14
145corresponding to3
147corresponding to6
149corresponding to6
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0)corresponding to1

编辑编辑:我想将所有元组更改为数字,以表示人口字典的键。但是在我进行了更改,然后打印出所有键和值之后,它仍然给了我元组,正如您从打印输出中看到的那样。

3 个答案:

答案 0 :(得分:1)

dict.items()返回键/值对的列表(这就是为什么在尝试查找元组的dict而不是键时出现KeyError错误的原因,你需要的只是键:

tmp = 0
for k in population.keys():
    tmp += 1
    population[tmp] = population.pop(k)

编辑:由于for k in dict遍历密钥生成器,因此在同时修改密钥时可能会出现奇怪的行为。为了避免这种情况,我修改了代码以使用population.keys()而不是密钥生成器返回密钥列表(在python2中)。在python3 dict.keys()中返回一个视图对象,只要dict的大小在迭代期间没有改变(更安全迭代list(population)),它应该是安全的。

答案 1 :(得分:0)

只需删除.items()即可。正如larsks所说,items返回元组,但你只需要键。

答案 2 :(得分:0)

我仍然没有理解这一点。你有一个字典,然后你将所有值打包到一个列表中。通过这个你已经松开了键和值之间的所有关系。那个词典的目的是什么呢?

但是,要获得您想要的所有值的列表(但也需要?),您只需:

my_list = list(my_dict.values())

不需要循环或其他任何东西。