web-dev-qa-db-ja.com

pythonで辞書のキーの位置を取得する方法

キーが辞書に存在する場合、キーがどの位置にあるか、つまり数値インデックスを知りたいです。例えば ​​:

辞書が以下で構成されている場合:

{'test':{1,3},'test2':{2},'test3':{2,3}}

if 'test' in dictionary:
   print(the index of that key)

たとえば、出力は0になります。 (「test3」の出力は2になります...)

現在、辞書を使用しています。これを行うには、順序付きdictを使用する必要があると思いますが、順序付きdictを使用してどうすればよいですか?

助けてくれてありがとう。

8
gweno10

Python <3.6の場合、Python内の辞書には順序がないため、アイテムにインデックスがないため、これを行うことはできません。代わりにOrderedDictライブラリのcollectionsを使用して、タプルのタプルを渡します。

>>> import collections
>>> d = collections.OrderedDict((('test',{1,3}),('test2',{2}),('test3',{2,3})))
>>> d.keys().index('test3') # Replace with list(d.keys()).index("test3") for Python 3
2
8

Python 3.6、dictionaries now preserved the Insertion order 。なので、Python 3.6+を使用すると、変換してインデックスを取得できますdict_keysをリストに追加します。

dictionary = {'test':{1,3}, 'test2':{2}, 'test3':{2,3}}

if 'test' in dictionary:
   print(list(dictionary).index('test'))

別の例として、いくつかの重要なキーのインデックスを見つける方法を以下に示します。

key_list = list(dictionary)
keys_of_interest = ['test2', 'test3']

for key in keys_of_interest:
    print('key: {}, index: {}'.format(key, key_list.index(key)))

これからの出力は

key: test2, index: 1
key: test3, index: 2
1

残念ながら、Pythonで辞書がどのように構築されているかによって、そのようなことは不可能です。これらのデータ構造は本質的に順序付けされていません

必要な機能を取得するには、 OrderedDict などの別のデータ構造を使用する必要があります

1
wnnmaw

あなただけのインデックスを構築することができます:

ind= {k:i for i,k in enumerate(dictionary.keys())}

次にind['test3']は2で、O(1)アクセス時間です。

これは、キーが修正されている間は堅牢です。キーを追加/削除した場合は、インデックスを再構築する必要があります。

1
B. M.

python 3.6以降、dictsが挿入順序を維持する場合、1行で実行できます。キーが辞書にない場合は「None」を返します。

key_index = list(my_dictionary).index(the_key) if the_key in my_dictionary else None
0
Richard