这个变量定义在哪里?

时间:2012-03-12 04:01:16

标签: python

阅读diveintopython3时遇到了这种情况,无法解构成我所理解的小位。

>>> a_dict = {'a': 1, 'b': 2, 'c': 3}                        
>>> {value:key for key, value in a_dict.items()}             
>>> {1: 'a', 2: 'b', 3: 'c'}

a_dict.items()创建一个列表。但是a_dict.items()中的值对我没有意义,因为没有定义值......

这是怎么回事?

4 个答案:

答案 0 :(得分:4)

a_dict.keys()是您词典中的列表

a_dict.values()是您词典中的列表

a_dict.items()(键,值)

的列表

{value:key for key, value in a_dict.items()} dict()理解,它使用a_dict并使用切换其,返回一个新的数据结构作为结果。如果你仔细观察,你会发现在结果部分我们有value:key,但在迭代部分我们有key, value - 它们会切换!非常棘手,非常pythonic。

如果a_dict中没有重复值,则会导致原始字典的反转。如果存在重复项,由于新dict中的所有键必须是唯一的,因此每个重复值的映射中只有一个存活。

>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> b_dict = {value:key for key, value in a_dict.items()}

>>> a_dict.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> b_dict.items()
[(1, 'a'), (2, 'b'), (3, 'c')]

>>> a_dict.keys()
['a', 'c', 'b']
>>> b_dict.values()
['a', 'b', 'c']

>>> a_dict.values()
[1, 3, 2]
>>> b_dict.keys()
[1, 2, 3]

# Try one with duplicates!
>>> c_dict = {'a': 1, 'b': 2, 'c': 3, 'd':2}
>>> d_dict = {value:key for key, value in c_dict.items()}

# The number 2 can only map to one value;
# the constructor seems to have encountered 'd' last
>>> c_dict.items()
[('a', 1), ('c', 3), ('b', 2), ('d', 2)]
>>> d_dict.items()
[(1, 'a'), (2, 'd'), (3, 'c')]

如果你很难理解它们是如何工作的,那么这是一个更简单的 dict()理解的例子;将它输入交互式编辑器并乱用它!

>>> e_dict = {n: str(n) * n for n in range(1, 30)}

答案 1 :(得分:1)

这里明确定义了价值:

'a':1

这意味着索引'a'的值为1,依此类推。

第二行刚创建了一个dict,使用值作为键和键作为第一个词典中的值。

答案 2 :(得分:1)

value和key只是字典实际内容的占位符。这基本上意味着对于字典中的每个键:值对,值部分将分配给值,键部分将分配给键。

价值和关键的内容:

iteration    value     key 
   1           1       'a'
   2           2       'b'
   3           3       'c'

答案 3 :(得分:1)

这一行:

{value:key for key, value in a_dict.items()}

被称为字典理解,类似于列表推导。 PEP 274为您提供了有关此语法的更多详细信息。

扩展的表达是:

temp_dict = dict()
for key, value in a_dict.items():
    temp_dict[value] = key
print temp_dict