2016-03-18 3 views
3

Если ключ присутствует в словаре, я хочу знать, в какой позиции находится ключ в числовом индексе. Например:Как получить положение ключа в словаре в python

если словарь состоит из:

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

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

Выход будет 0, например. (Выход будет 2 для 'test3' ...)

Я использую словарь на данный момент, я предполагаю, что мне нужно будет использовать упорядоченный dict, чтобы сделать это, но как я могу это сделать он использует упорядоченный dict?

Спасибо за любую помощь.

ответ

1

К сожалению, такая вещь невозможна из-за того, как словари построены в python. Эти структуры данных по своей сути являются неупорядоченными.

Чтобы получить функциональность, которую вы хотите вы должны использовать другую структуру данных, таких как OrderedDict

7

Для 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 
+0

Это не работает так же, как, что в Python 3, так как 'OrderedDict.keys' возвращает экземпляр' odict_keys' там и не список. Я думаю, что нужно наложить это на кортеж или список сначала в Python 3: 'tuple (d.keys()). Index ('test3')' – Callidior

+0

Спасибо @Callidior, я изменил свой код для работы с Python 3 также. –

+1

Это относится только к Python <3.6. Для Python 3.6+ словари теперь сохраняют порядок вставки. См. Это [письмо из списка рассылки Python-Dev] (https://mail.python.org/pipermail/python-dev/2016-September/146327.html) для обсуждения и примера. –

1

Вы можете просто построить индекс:

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

тогда ind['test3'] будет 2, с O (1) время доступа.

Это устойчиво, когда ключи фиксированы. Если вы добавляете/удаляете ключи, вам нужно перестроить индекс.

0

Начиная с Python 3.6, словари теперь preserves 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