Python辞書のキーを持っていて、辞書で対応するインデックスを取得したいと思います。次の辞書があるとします。
d = { 'a': 10, 'b': 20, 'c': 30}
キー値'b'が与えられた場合にインデックス値1を取得できるように、Python関数の組み合わせはありますか?
d.??('b')
ループまたはラムダ(ループが埋め込まれている)で実現できることはわかっています。もっと簡単な方法があるはずだと思っただけです。
Python辞書のキーを持っていて、辞書で対応するインデックスを取得したいと思います。次の辞書があるとします。
d = { 'a': 10, 'b': 20, 'c': 30}
キー値'b'が与えられた場合にインデックス値1を取得できるように、Python関数の組み合わせはありますか?
d.??('b')
ループまたはラムダ(ループが埋め込まれている)で実現できることはわかっています。もっと簡単な方法があるはずだと思っただけです。
OrderedDictsを使用する:http://docs.python.org/2/library/collections.html#collections.OrderedDict
>>> x = OrderedDict((("a", "1"), ("c", '3'), ("b", "2")))
>>> x["d"] = 4
>>> x.keys().index("d")
3
>>> x.keys().index("c")
1
Python3を使用している場合
>>> list(x.keys()).index("c")
1
Python(<3.6)の辞書には順序がありません。代わりに、データ構造としてタプルのリストを使用できます。
d = { 'a': 10, 'b': 20, 'c': 30}
newd = [('a',10), ('b',20), ('c',30)]
次に、このコードを使用して、特定の値を持つキーの場所を見つけることができます
locations = [i for i, t in enumerate(newd) if t[0]=='b']
>>> [1]
いいえ、Python辞書には順序が設定されていないため、簡単な方法はありません。
ドキュメントから:
キーと値は任意の順序でリストされます。これはランダムではなく、Pythonの実装によって異なり、辞書の挿入と削除の履歴によって異なります。
言い換えると、の「インデックス」はb
、以前にマッピングに挿入されたものとマッピングから削除されたものに完全に依存します。
>>> map={}
>>> map['b']=1
>>> map
{'b': 1}
>>> map['a']=1
>>> map
{'a': 1, 'b': 1}
>>> map['c']=1
>>> map
{'a': 1, 'c': 1, 'b': 1}
Python 2.7では、アプリケーションにとって挿入順序が重要な場合は、代わりにcollections.OrderedDict()
型を使用できます。
#Creating dictionary
animals = {"Cat" : "Pat", "Dog" : "Pat", "Tiger" : "Wild"}
#Convert dictionary to list (array)
keys = list(animals)
#Printing 1st dictionary key by index
print(keys[0])
#Done :)
辞書をに送信するだけlist
で、探しているアイテムのインデックスを選択できます。
DictTest = {
'4000':{},
'4001':{},
'4002':{},
'4003':{},
'5000':{},
}
print(list(DictTest).index('4000'))