キーが辞書に存在する場合、キーがどの位置にあるか、つまり数値インデックスを知りたいです。例えば :
辞書が以下で構成されている場合:
{'test':{1,3},'test2':{2},'test3':{2,3}}
if 'test' in dictionary:
print(the index of that key)
たとえば、出力は0になります。 (「test3」の出力は2になります...)
現在、辞書を使用しています。これを行うには、順序付きdict
を使用する必要があると思いますが、順序付きdict
を使用してどうすればよいですか?
助けてくれてありがとう。
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
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
残念ながら、Pythonで辞書がどのように構築されているかによって、そのようなことは不可能です。これらのデータ構造は本質的に順序付けされていません。
必要な機能を取得するには、 OrderedDict などの別のデータ構造を使用する必要があります
あなただけのインデックスを構築することができます:
ind= {k:i for i,k in enumerate(dictionary.keys())}
次にind['test3']
は2で、O(1)アクセス時間です。
これは、キーが修正されている間は堅牢です。キーを追加/削除した場合は、インデックスを再構築する必要があります。
python 3.6以降、dictsが挿入順序を維持する場合、1行で実行できます。キーが辞書にない場合は「None」を返します。
key_index = list(my_dictionary).index(the_key) if the_key in my_dictionary else None