#python #dictionary
#python #словарь
Вопрос:
Я относительно новичок в Python и у меня возникли проблемы с переводом следующей строки:
diffList = [key for key in set(dict1n.keys() dict2.keys()) if dict1.get(key) != dict2t.get(key)]
Может кто-нибудь, пожалуйста, переписать это для меня — разбить это на несколько строк в «нормальном» удобном формате?
Я думаю — и я не уверен — что строка пытается сделать, это сравнить два словаря и вывести различия в список.
Спасибо.
ОБНОВЛЕНИЕ: у меня были опечатки в строке — должны быть только dict1 и dict2:
diffList = [key for key in set(dict1.keys() dict2.keys()) if dict1.get(key) != dict2.get(key
Ответ №1:
Это переводится как:
diffList = []
for key in set(dict1.keys() dict2.keys()):
if dict1.get(key) != dict2.get(key):
diffList.append(key)
Что это в основном делает, так это генерирует новый список с уникальными значениями из обоих dicts. Не то чтобы эти значения были уникальными для каждого ключа и не обязательно уникальными глобально.
Набор — это структура данных, в которой может быть только одна запись для каждого уникального значения. Таким образом, он будет уверен, что в нем есть только уникальные элементы. Это гарантирует, что вы проверяете каждый ключ только один раз.
Обновление: изменены некоторые вещи в соответствии с обновлениями к вопросу.
Комментарии:
1. Ой, извините, у меня была опечатка — должны быть только dict1 и dict2, т. е. 2 словаря.
Ответ №2:
Опубликованный вами код представляет собой «Понимание списка»
Это переводится как:
diffList = []
for key in set(dict1n.keys() dict2.keys()):
if dict1.get(key) != dict2t.get(key):
diffList.append(key)
Ответ №3:
На английском это:
Перечислите те ключи, которые:
- присутствуют по крайней мере в одном из словарей
- но не имеют одинаковых значений в обоих словарях
- обработка случаев:
dictX[key] is None
и:key not in dictY
как имеющих одинаковое значение (вот какdict.get()
работает.)
- обработка случаев:
Ответ №4:
На английском языке:
- Получить все ключи и сохранить их в
set
->set(dict1n.keys() dict2.keys())
- Выполните итерацию по ним ->
key for key in set(...)
- Получите эти ключи, которые имеют разные значения в разных картах:
if dict1.get(key) != dict2t.get(key)
(только ключи, которые находятся в обоих наборах: потому чтоdictX.get(key)
вернетNone
, если ключа нет вdictX
, но тогда тот же ключ будет в другом наборе) - Эти ключи хранятся в виде списка:
diffList = [ key ... ]
Комментарии:
1. Не слишком ли много просить обновить ответ, чтобы использовать реальные слова?
2. Реальные слова важны для людей, которым нужно видеть реальные слова. Не каждый может читать английский сленг.