这条Python线的翻译

时间:2011-05-17 06:47:04

标签: python dictionary

我相对较新的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 个答案:

答案 0 :(得分:3)

转换为:

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

这基本上做的是它生成一个新列表,其中包含来自两个dicts的唯一值。并非这些值对于每个键都是唯一的,并不一定是唯一的全局。

集合是一种数据结构,每个唯一值只能有一个条目。因此,它将确保它只有唯一的项目。这将确保您只检查一次密钥。

更新:根据问题的更新更改了一些内容。

答案 1 :(得分:2)

您发布的代码是"List Comprehension"

它转换为:

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

答案 2 :(得分:1)

英文是:

列出以下键:

  • 出现在至少一个词典中
  • 但两个词典中的值不同
    • 将案件处理:dictX[key] is None和:key not in dictY具有相同的价值(dict.get()的工作方式。)

答案 3 :(得分:1)

英文:

  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 ... ]