Как сравнить словари Python
Сравнить словари можно с помощью операторов == и != . Смотрите пример:
dct1 = < 'a': 1, 'b': 2, 'c': 3 >dct2 = < 'a': 4, 'b': 5, 'c': 6 >dct3 = < 'a': 4, 'b': 5, 'c': 6 >print(f’dct1 == dct2:’, dct1 == dct2) print(f’dct2 == dct3:’, dct2 == dct3) print(f’dct1 != dct2:’, dct1 != dct2)
Результат выполнения кода:
‘dct1 == dct2:’ False ‘dct2 == dct3:’ True ‘dct1 != dct2:’ True
Смотрите также
- метод update ,
который обновляет словарь ключами и значениями другого словаря
Сравнить значения словаря из списка и при совпадении выдать ключ из словаря
В чем у вас проблема? И по какому принципу устанавливается связь между ключом словаря и элементом списка?
13 дек 2017 в 8:51
Поправьте заголовок или тело вопроса — они полностью противоположные
13 дек 2017 в 8:52
mkkik, ну собственно проблема в самом написании (
13 дек 2017 в 9:05
mkkik на счет принципа связи между ключом словаря и элемента списка меня тоже интересует, может связь нельзя выполнить
13 дек 2017 в 10:16
@rrron, а что вам не так в моем коде? просто, любопытно 🙂 можно иначе — eval.in/918348
13 дек 2017 в 10:26
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
In [24]: dictionary = In [25]: lst = ["val", "val2", "val3"] In [26]: reversed_dict = In [27]: result = [reversed_dict[x] for x in list(set(dictionary.values()) & set(lst))] In [28]: result Out[28]: ['key', 'key2']
Но вариант в ответе ранее лучше и проще 🙂
In [35]: list(filter(lambda x: dictionary[x] in lst, dictionary)) Out[35]: ['key', 'key2']
Отслеживать
ответ дан 13 дек 2017 в 11:14
Pavel Durmanov Pavel Durmanov
5,756 3 3 золотых знака 23 23 серебряных знака 44 44 бронзовых знака
Второй вариант подошел, супер! )
13 дек 2017 в 14:56
я не умею про питон, но что-то такое должно работать, может, неэффективно
for i in dictionary : for j in list : if j == dictionary[i] : print(i)
И если это не учебное задание, то однострочно. Впрочем, это есть по ссылке в комменте
print([k for k,v in dictionary.items() if list.count(v)])
Или даже по мотивам ответа @Alban
print([k for k,v in dictionary.items() if v in list])
Как сравнить значения словаря в Питон 3.5?
У меня есть массив словарей. После пользовательского ввода формируется новый словарь, который нужно сравнить со всеми словарями массива и вернуть только те словари, которые подошли под запрос. Подскажите пожалуйста, как это эффективно провернуть? При этом возможно, что в пользовательском словаре для поиска будут ключи, которых нет в некоторых словарях из массива, а так же ключей может быть меньше. В примере я должен получить третий словарь.
def sample(): obj = [< 'a': 1, 'b': 2, 'c': 3 >, < 'a': 4, 'b': 23 >, < 'a': 1, 'b': 3, 'c': 4 >] return obj def search(): custom =
- Вопрос задан более трёх лет назад
- 4225 просмотров
Комментировать
Решения вопроса 1
result = [] for i in obj: if all(item in i.items() for item in custom.items()): result.append(i) return result
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1
Если данных много, можете сделать инвертированный индекс, ( напр. ключ (‘a’, 1) будет содержать список всех словарей где есть <'a': 1>), таким образом нужно будет перебирать не все данные, а только часть. Будет работать гораздо быстрее.'a':>
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
Как вывод команды help в терминал передать в переменную?
- 1 подписчик
- 7 минут назад
- 8 просмотров
Как сравнить значения словаря со списком и при совпадении напечатать ключ?
Находил решение в интернете, но подстроить под мой случай не смог, получаю ошибки. Вот мой гавнокод:
a = input().split() # Нужно вводить строки через пробел: a ab abc aab n = int(input()) # Вводим одно число index = [] for s in a: index.append([s.find(c) for c in s]) print(index) # Выводит вложенные списки вида [[a,b,c], [d,e,f]] dict_ = dict(zip(a, index)) print(dict_) # Превращает вложенный список в словарь вида temp = [] count = 0 lst = [] while n != 0: word = input().split() for s in word: lst = [s.find(ss) for ss in s] print(lst) # Циклически выводит списки: [a,b,c] n -= 1
Код разделен на две части, первая часть создает словарь, а вторая просит вводить строки, которые нужно вводить по очереди. Дальше не реализовал, но после каждого ввода программа должна сравнивать её со значениями словаря и при совпадении поместить ключ этого значения в переменную и распечатать её, а если не совпадает, то запрашивает вводить еще, пока не закончатся попытки, указанные в переменной n. Пожалуйста, помогите дописать эти несколько строчек в последнем цикле.
- Вопрос задан более трёх лет назад
- 3107 просмотров
2 комментария
Простой 2 комментария