Как получить индекс в словаре, а не значение ключа - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть словарь, подобный этому:

header= {'f1': 13, 'f2': 7, 'f3': 45};

Как видите, header['f2'] = 7 имеет минимальное значение, и этот элемент является вторым в заголовке (его индекс равен 1).

Что я делаю?

Я пробовал этот код, чтобы получить индекс минимального элемента в заголовке (здесь 1), но он возвращает значение ключа:

index = min(header)

Выход:

f2

Что я хочу?

Я хочу получить индекс минимального элемента в словаре. Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

list(header.values()).index(min(header.values()))

Возвращает индекс наименьшего значения в dict.

0 голосов
/ 15 ноября 2018

Словари не имеют индексов

Даже в Python 3.6+ (официально 3.7+), где словари упорядочены по вставке , вы не можете извлечь ключ или значение непосредственно по позиции. То же самое верно для collections.OrderedDict. См. Также: Эффективный доступ к элементам словаря по позициям в Python 3.6+ .

min + enumerate

Предполагая Python 3.6+, вы можете извлечь позицию ключа / значения на основе порядка вставки с помощью итерации. В этом случае вы можете использовать min с пользовательской функцией lambda:

header = {'f1': 13, 'f2': 7, 'f3': 45}

min_idx, (min_key, min_val) = min(enumerate(header.items()), key=lambda x: x[1][1])

print((min_idx, min_key, min_val))

(1, 'f2', 7)
0 голосов
/ 15 ноября 2018

Использование header.values() возвращает список только значений вашего словаря:

>>> header= {'f1': 13, 'f2': 7, 'f3': 45}
>>> header.values()
[13, 7, 45]
>>> print(min(header.values()))
7

РЕДАКТИРОВАТЬ: Извините, вы хотели получить соответствующий ключ.Вот один из способов сделать это, не добавляя никаких других специальных библиотек:

print(header.keys()[header.values().index(min(header.values()))])

Хотя словари не упорядочены в Python, списки есть, и списки, которые вы получаете из строки .keys() и .values()друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...