Перевод этой строки Python - PullRequest
0 голосов
/ 17 мая 2011

Я относительно новичок в 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

Ответы [ 4 ]

3 голосов
/ 17 мая 2011

Это означает:

diffList = []
for key in set(dict1.keys() + dict2.keys()):
    if dict1.get(key) != dict2.get(key):
        diffList.append(key)

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

Набор - это структура данных, в которой может быть только одна запись для каждого уникального значения. Так что он позаботится о том, чтобы в нем были только уникальные предметы. Это обеспечит проверку каждого ключа только один раз.

Обновление : Изменены некоторые вещи в соответствии с обновлениями вопроса.

2 голосов
/ 17 мая 2011

Код, который вы разместили, - "Понимание списка"

Это переводится как:

diffList = []
for key in  set(dict1n.keys() + dict2.keys()):
  if dict1.get(key) != dict2t.get(key):
    diffList.append(key)
1 голос
/ 17 мая 2011

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

  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 голос
/ 17 мая 2011

На английском это:

Перечислите те ключи, которые:

  • присутствуют хотя бы в одном из словарей
  • , но не имеют одинаковых значенийв обоих словарях
    • рассматривая случаи: dictX[key] is None и: key not in dictY как имеющие одинаковое значение (вот как работает dict.get().)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...