Python 这个变量是在哪里定义的?

Python 这个变量是在哪里定义的?,python,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()创建一个列表。但对我来

阅读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()创建一个列表。但对我来说,dict.items()中的值没有意义,因为没有定义值


这是怎么回事?

这里清楚地定义了值:

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


第二行刚刚创建了一个dict,使用value作为键,key作为第一个dict的值。

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

价值和关键的内容:

iteration    value     key 
   1           1       'a'
   2           2       'b'
   3           3       'c'
a_dict.keys()
是字典中的键列表

a_dict.values()
是字典中的值列表

a_dict.items()
是(键、值)对的列表

{value:key for key,a_dict.items()中的value}
是一种dict()理解,它接受
a_dict
并将其键与其值切换,结果返回一个新的数据结构。如果仔细观察,您会发现在结果部分我们有
value:key
,但在迭代部分我们有
key,value
——它们会切换!非常狡猾,非常像蟒蛇

如果
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()的工作原理时遇到困难,可以使用dict()理解法;把它输入到你的交互式编辑器中,然后乱搞它

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

{value:key for key,dict.items()中的值}

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

这个表达式是:

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

用简单的英语,你的
for
是这样说的:拉出每个
键和分配给它的
值,并将它们存储在相应的变量中。方便吗?看着上面的颜色语法突然点击。。我注意到它只是一个>>>,用于循环中的某个东西,其中某个东西是两个变量,而不是1。起初,我认为逗号表示与外部{}之间的关系。我不习惯看到东西里面的陈述你明白了!@machine-denrging的回答对细节做了一些很好的澄清:^)我没有用“清楚”这个词来冒犯任何人或任何事。我之所以使用它,是因为它定义明确,没有函数、表达式等,而不是模糊定义,这意味着它是通过函数或表达式生成的。