这是一个新手问题。
[(i,j) for i in range(3) for j in range(3)]
返回
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
但是,为什么
{i: j for i in range(3) for j in range(3)}
返回
{0: 2, 1: 2, 2: 2}
但是应该生成以下无效的字典
{0: 0, 0: 1, 0: 2, 1: 0, 1: 1, 1: 2, 2: 0, 2: 1, 2: 2}
答案 0 :(得分:3)
Python 执行处理通过嵌套理解生成的完整的9元素表达式。 Python根据数据类型的规则处理表达式。这些元素中的每一个都是对指定的dict元素的分配,大致等同于
d = {}
d[0] = 0
d[0] = 1
d[0] = 2
d[1] = 0
d[1] = 1
d[1] = 2
d[2] = 0
d[2] = 1
d[2] = 2
这将导致您看到字典。您无法根据要求获取命令:
{0: 0, 0: 1, 0: 2, 1: 0, 1: 1, 1: 2, 2: 0, 2: 1, 2: 2}
因为这不是有效的,可持续的dict
值。
Python不会引发错误,因为根据语言定义,表达式没有错误。在某些需要重写密钥的应用程序中。
答案 1 :(得分:1)
因为Python dict
数据结构不允许重复的键。相反,在这种情况下,Python返回更新的最后一项。