Как сравнить значения в словаре python
Перейти к содержимому

Как сравнить значения в словаре python

Есть ли лучший способ сравнить значения словаря

В настоящее время я использую следующую функцию для сравнения значений словаря. Есть ли более быстрый или лучший способ сделать это?

Редактировать: оба слова содержат одинаковые ключи.

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)

Сравнить значения словаря из списка и при совпадении выдать ключ из словаря

Необходимо сравнить значения словаря и списка и при совпадении выдать ключ из словаря.

user avatar

user avatar

Но вариант в ответе ранее лучше и проще 🙂

user avatar

я не умею про питон, но что-то такое должно работать, может, неэффективно

И если это не учебное задание, то однострочно. Впрочем, это есть по ссылке в комменте

Или даже по мотивам ответа @Alban

user avatar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками 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 и, если ключи равны, распечатать их значения.

и после сравнения ключей распечатать

Я думаю, вы перепутали идеи ключей / значений. Ключ — это то, что находится слева, которое вы используете для сопоставления со значением справа. (Числа — это ключи, имена — это значения для вашего примера).

Формы c голосовым вводом в React с помощью Speechly

Flatpickr: простой модуль календаря для вашего приложения на React

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Ответы 8

Вы можете выполнить итерацию по пересечению ключей двух dicts и распечатать соответствующие значения двух dicts после сопоставления их с функцией repr , что поможет заключить строки в кавычки:

Вы можете выполнять операции set с dict.keys ()? Я такого раньше не видел!

Да, ключи dict — это объекты типа set согласно документация. Это довольно удобно.

Выполните итерацию по одному словарю и проверьте наличие ключа в другом:

Словари хороши в Python, потому что они позволяют нам очень легко искать значение ключа, а также проверять, существует ли ключ в dict.

Итак, в вашем примере, если вы хотите распечатать значения всякий раз, когда ключи между dicts одинаковы, вы можете сделать что-то вроде этого:

Вы просите о пересечении двух словарей.

Использование встроенного типа set

Для этого можно использовать встроенный тип set , который реализует функцию intersection() .

Вы можете превратить список в такой набор:

Итак, чтобы найти пересечение между ключами двух словарей, вы можете превратить ключи в наборы и найти пересечение.

Чтобы получить список ключей словаря:

Итак, чтобы найти пересечение клавиш двух диктовок:

В вашем примере это вернет набор <'12', '14'>.

Код выше в более читаемом виде:

Использование анонимной функции (лямбда-функции) и понимания списка

Еще один простой способ решить эту проблему — использовать лямбда-функции.

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

Итак, чтобы получить результат:

Любой из двух вышеуказанных методов даст вам ключи, общие для обоих словарей.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *