Python 3 фильтр или сортировка словаря с условием

316 просмотра
0
0 Комментариев

Есть большой словарь типа {'вася': 4, 'сон': 3, 'пол': 4} и так далее.

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

Желательно сортированный по возрастанию.

Можно ли в python создавать условно-именованные переменные?
Хотелось бы, например, что-то вроде этого:

q = get ALL from {} where val == (foreach range(1, {}.__len__()))

а потом создать переменную по типу

create str(list({}.values.sortbyinc))

в которую выгрузить все ключи словаря со значением, например 1 и так для всех найденных значений.


Добавить комментарий

2 Answers

Python Опубликовано 10.12.2018
0

dict_1 = {'вася': 4, 'сон': 3, 'пол': 4}
new_object = [(x,dict_1[x]) for x in dict_1.keys() if dict_1[x] == 4]
print(new_object)

Результат:

[('вася', 4), ('пол', 4)]

Добавить комментарий
0

from collections import defaultdict, OrderedDict
 
dct = {'вася': 4, 'сон': 3, 'пол': 4}
 
defdct = defaultdict(list)
 
for key, value in dct.items():
    defdct[value].append(key)
 
print(defdct)
 
# Напечатает:
# defaultdict(<class 'list'>, {3: ['сон'], 4: ['пол', 'вася']})
# По сути это обычный словарь,
# из которого можно по числовому ключу получить список слов
 
# А теперь из него вот так можно получить упорядоченный словарь,
# отсортированный по возрастанию числового ключа:
 
sorted_dct = OrderedDict(sorted(defdct.items()))

Отсортировать можно и по другим признакам, если использовать аргумент key (примеры использования sorted с аргументом key легко гугляться)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up