2016-08-24 50 views
1

我有一個python字典。重置字典新鍵

A=[0:'dog',1:'cat',3:'fly',4,'fish',6:'lizard'] 

我想根據range(len(A))(自然增量)重置鍵,它應該是這樣的:

new_A=[0:'dog',1:'cat',2:'fly',3:'fish',4:'lizard'] 

我怎麼能這樣做呢?

+4

字典使用大括號而不是方的人 – depperm

+0

@vaultah但是,這將不保留值的相對順序,會嗎? – syntonym

+0

與鍵0-4的字典也可能只是一個列表。 – wim

回答

2

這裏有兩個py2.x和py3.x一個工作示例:

A = {0: 'dog', 1: 'cat', 3: 'fly', 4: 'fish', 6: 'lizard'} 

B = {i: v for i, v in enumerate(A.values())} 
print(B) 
+0

這不需要正常工作 – janbrohl

+0

@vaultah A.values()的順序是準隨機的,僅僅因爲你得到了'{0:'dog',1:'cat',2:'fly',3:'魚',4:'蜥蜴'}'一旦你不能認爲它總是這樣的順序 - 這正是我的意思。我在想,確定性排序是重要的。 – janbrohl

+0

@janbrohl我不知道你在說什麼,請先閱讀問題 – BPL

2

如果你想在舊密鑰的升序指定新的密鑰,然後

new_A = {i: A[k] for i, k in enumerate(sorted(A.keys()))} 
1

詞典是沒有命令。如果你的鍵是增量整數,你也可以使用一個列表。

new_A =名單(A.values())

2

如果你想保持鍵

A={0:'dog',1:'cat',3:'fly',4,'fish',6:'lizard'} 
new_A=dict((i,A[k]) for i,k in enumerate(sorted(A.keys())) 
0

如果你想創建排序以及由密鑰訪問,同階,那麼你想要一個OrderedDict

>>> from collections import OrderedDict 
>>> d=OrderedDict() 
>>> d['Cat'] = 'cool' 
>>> d['Dog'] = 'best' 
>>> d['Fish'] = 'cold' 
>>> d['Norwegian Blue'] = 'ex-parrot' 
>>> d 
OrderedDict([('Cat', 'cool'), ('Dog', 'best'), ('Fish', 'cold'), ('Norwegian Blue', 'ex-parrot')]) 
>>> d.values() 
odict_values(['cool', 'best', 'cold', 'ex-parrot']) 
>>> d.keys() 
odict_keys(['Cat', 'Dog', 'Fish', 'Norwegian Blue']) 

您保留訪問項目爲他們添加順序序列的能力,但你也有快速訪問按哪個鍵的字典(散)給你。如果你想「自然」序列號使用enumerate正常:

>>> for i,it in enumerate(d.items()): 
... print('%5d %15s %15s' % (i,it[0], it[1])) 
... 
    0    Cat   cool 
    1    Dog   best 
    2   Fish   cold 
    3 Norwegian Blue  ex-parrot 
>>>