Перевод этой строки Python

#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:

На английском языке:

  1. Получить все ключи и сохранить их в set -> set(dict1n.keys() dict2.keys())
  2. Выполните итерацию по ним -> key for key in set(...)
  3. Получите эти ключи, которые имеют разные значения в разных картах: if dict1.get(key) != dict2t.get(key)
    (только ключи, которые находятся в обоих наборах: потому что dictX.get(key) вернет None , если ключа нет в dictX , но тогда тот же ключ будет в другом наборе)
  4. Эти ключи хранятся в виде списка: diffList = [ key ... ]

Комментарии:

1. Не слишком ли много просить обновить ответ, чтобы использовать реальные слова?

2. Реальные слова важны для людей, которым нужно видеть реальные слова. Не каждый может читать английский сленг.