2015-05-12 88 views
-2

我想重新映射或將字典的鍵更改爲1,2,3,...,因爲鍵本身有點複雜。在這篇文章之後,How do I re-map python dict keys 這就是我所做的。嘗試重新映射Python中字典的鍵時出現keyerror

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 

編輯編輯:我想改變所有的元組來表示人口字典的關鍵字。但是在我做出改變之後,然後打印出所有的鍵和值,它仍然給了我元組,就像你從打印出來的那樣。

+0

「人口」是什麼樣的? – michaelpri

+2

請注意'.items()'不返回鍵列表。它返回'(key,value)'元組列表。有關更多信息,請參閱'pydoc dict'。 – larsks

+0

@michaelpri,人口將元組映射到一個整數。 – josephS

回答

0

只要刪除.items(),這應該工作。正如larsks所說,items返回元組,但您只需要鍵。

1

dict.items()返回鍵/值對的列表(這就是爲什麼你想查找的元組,而不是關鍵的字典時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()返回一個視圖對象,而應該是安全的,只要在迭代過程中字典的大小不變(更安全地遍歷list(population)

+0

實際上,在Python3中,這會返回一個View對象,而不是一個生成器。 – Olaf

0

我仍然不會拒絕這一點。你有一個字典,然後你將所有的值打包到一個列表中。由此你已經放棄了關鍵和價值之間的所有關係。那麼字典的目的是什麼?

但是,你似乎想(?還需要)來獲取所有值的列表,你只是做:

my_list = list(my_dict.values()) 

無需環路或其他任何東西。