Получение списка ключей в словаре Python, чьи значения dict минимальны в соответствии с заданным порядком [duplicate]

1

У меня есть словарь, такой как:

d = {'a':[0,0], 'b':[0,0], 'c':[0,1], 'd':[1,1]}

Там порядок значений, в основном лексикографический, такой, что [0, 0] < [0,1] < [1,1].

Мне интересно получить ключи, значения которых минимальны в соответствии с этим порядком. В этом случае желаемый результат:

result = ['a', 'b']

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

L.sort(key = str),

затем (4) получить минимальный элемент m отсортированного L и, наконец, (5) извлечь ключи, значения которых равны m.

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

Мой вопрос в том, есть ли более простой, более элегантный (и более эффективный) способ сделать это. Должен ли я использовать другую структуру данных вместо словаря в первую очередь?

  • 0
    Вы можете сравнивать списки напрямую при сортировке, не нужно конвертировать их в строки.
Теги:
dictionary

1 ответ

0
Лучший ответ

Самый простой способ - использовать функцию min() чтобы найти минимальное значение, затем выбрать ключи, соответствующие этому минимуму, используя понимание списка:

d = {'a': [0, 0], 'b': [0, 0], 'c': [0, 1], 'd': [1, 1]}
min_value = min(d.values())
keys = [key for key, val in d.items() if val == min_value]

Это решение имеет сложность времени O(n).

Вы также можете использовать itertools.groupby, хотя для этого потребуется сортировка словаря по значениям (и, следовательно, выполняется в O(n log n)):

from itertools import groupby
keys = next(list(g) for k, g in groupby(sorted(d, key=d.get), key=d.get))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню