Есть ли лучший способ сравнить значения словаря
В настоящее время я использую следующую функцию для сравнения значений словаря. Есть ли более быстрый или лучший способ сделать это?
Редактировать: оба слова содержат одинаковые ключи.
8 ответов
Если у дикторов есть идентичные наборы ключей, и вам нужны все эти отпечатки для любой разницы в значениях, вы мало что можете сделать; может быть что-то вроде:
В значительной степени эквивалентно тому, что у вас есть, но вы можете получить более приятное представление, например, отсортировав diffkeys перед тем, как зацикливаться на нем.
Если вы просто сравниваете на равенство, вы можете просто сделать это:
В противном случае единственная серьезная проблема, которую я вижу, это то, что вы получите KeyError, если в dict1 есть ключ, которого нет в dict2, поэтому вы можете захотеть сделать что-то вроде этого:
Вы могли бы сжать это в понимание, чтобы просто получить список ключей, которые тоже не совпадают:
Единственная другая оптимизация, о которой я могу подумать, — это использовать len (dict), чтобы выяснить, в каком из dict меньше записей, и сначала пройти по нему, чтобы получить максимально короткий цикл.
Не уверен, что это помогает, но в моем приложении я должен был проверить, изменился ли словарь.
Выполнение этого не будет работать, так как в основном это все тот же объект:
Использование копий / копий работ:
Если истинная цель вопроса — сравнение между диктовками (а не печатные различия), ответ —
Это было упомянуто ранее, но я чувствовал, что это немного тонет в других битах информации. Это может показаться поверхностным, но сравнение значений у dicts действительно мощная семантика. Это покрывает
- количество ключей (если они не совпадают, значения не совпадают)
- имена ключей (если они не совпадают, они не равны)
- значение каждого ключа (они также должны быть равны ‘==’)
Последний пункт снова кажется тривиальным, но на самом деле он интересен, поскольку означает, что все это применяется рекурсивно также к вложенным диктовкам. Например.
Подобная семантика существует для сравнения списков. Все это делает легким для вас, например, сравните глубокие структуры Json, наедине с простым «= info»>
Вы можете использовать наборы для этого тоже
Если ваши словари глубоко вложены и содержат разные типы коллекций, вы можете преобразовать их в строку json и сравнить.
Caveat — это решение может не работать, если в ваших словарях есть двоичные строки в значениях, так как это не json-сериализуемый
Хм, вы описываете dict1 == dict2 (проверьте, равны ли оба слова)
Но ваш код выполняет all( dict1[k]==dict2[k] for k in dict1 ) (проверьте, все ли записи в dict1 совпадают с записями в dict2)
Сравнить значения словаря из списка и при совпадении выдать ключ из словаря
Необходимо сравнить значения словаря и списка и при совпадении выдать ключ из словаря.
![]()
![]()
Но вариант в ответе ранее лучше и проще 🙂
![]()
я не умею про питон, но что-то такое должно работать, может, неэффективно
И если это не учебное задание, то однострочно. Впрочем, это есть по ссылке в комменте
Или даже по мотивам ответа @Alban
![]()
Всё ещё ищете ответ? Посмотрите другие вопросы с метками python-3.x list словари compare или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как сравнить два ключа словаря в Python?
Я хочу сравнить два словарных ключа в python и, если ключи равны, распечатать их значения.
и после сравнения ключей распечатать
Я думаю, вы перепутали идеи ключей / значений. Ключ — это то, что находится слева, которое вы используете для сопоставления со значением справа. (Числа — это ключи, имена — это значения для вашего примера).



Ответы 8
Вы можете выполнить итерацию по пересечению ключей двух dicts и распечатать соответствующие значения двух dicts после сопоставления их с функцией repr , что поможет заключить строки в кавычки:
Вы можете выполнять операции set с dict.keys ()? Я такого раньше не видел!
Да, ключи dict — это объекты типа set согласно документация. Это довольно удобно.
Выполните итерацию по одному словарю и проверьте наличие ключа в другом:
Словари хороши в Python, потому что они позволяют нам очень легко искать значение ключа, а также проверять, существует ли ключ в dict.
Итак, в вашем примере, если вы хотите распечатать значения всякий раз, когда ключи между dicts одинаковы, вы можете сделать что-то вроде этого:
Вы просите о пересечении двух словарей.
Использование встроенного типа set
Для этого можно использовать встроенный тип set , который реализует функцию intersection() .
Вы можете превратить список в такой набор:
Итак, чтобы найти пересечение между ключами двух словарей, вы можете превратить ключи в наборы и найти пересечение.
Чтобы получить список ключей словаря:
Итак, чтобы найти пересечение клавиш двух диктовок:
В вашем примере это вернет набор <'12', '14'>.
Код выше в более читаемом виде:
Использование анонимной функции (лямбда-функции) и понимания списка
Еще один простой способ решить эту проблему — использовать лямбда-функции.
Я включаю это здесь на всякий случай, если вы хотите знать. Наверное, не самый эффективный способ сделать!
Итак, чтобы получить результат:
Любой из двух вышеуказанных методов даст вам ключи, общие для обоих словарей.