2016-08-24 4 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のdictもリストにすることができます。 – 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']) 

あなたは彼らが追加されたために、順序などのアイテムにアクセスする能力を保持していますが、高速アクセス・バイ・キーのdict(ハッシュ)があなたを与える持っています。あなたは「自然な」シーケンス番号をしたい場合は、通常通り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 
>>> 
関連する問題