这个python字典代码实际上如何工作?

时间:2014-09-03 03:43:11

标签: python

我正在关注Zed Shaw"学习Python的艰难之路,第3版"

以下是本书练习39中的一个小代码示例:

states = {
'Oregon': 'OR',
'Florida': 'FL',
'California': 'CA',
'New York': 'NY',
'Michigan': 'MI' }
for state, abbrev in states.items():
    print "%s is abbreviated %s" % (state, abbrev)
print "-" * 10
for abbrev, state in states.items():
    print "%s is abbreviated %s" % (abbrev, state)

上述程序的输出是:

C:\>python code.py
California is abbreviated CA
Michigan is abbreviated MI
New York is abbreviated NY
Florida is abbreviated FL
Oregon is abbreviated OR
----------
California is abbreviated CA
Michigan is abbreviated MI
New York is abbreviated NY
Florida is abbreviated FL
Oregon is abbreviated OR
C:\>

在代码中,没有我们告诉python什么是状态和什么是缩写。 我的问题是:为什么两个打印报表都打印相同? python如何显示适当的状态"和" abreviation"即使我在第二个for循环中反转顺序?

如果我想先显示缩写(值)然后再显示(键),我该如何编写for循环。

注意:谢谢你的回答。 Stackoverflow告诉我,为了在我的问题中添加任何内容,我应该编辑问题而不是添加新评论....

5 个答案:

答案 0 :(得分:1)

  

我的问题是:为什么两个打印报表都打印相同?怎么样   python是否会显示相应的状态"和"缩写"即使   我在第二个for循环中颠倒了顺序?

如果将变量名称更改为a,b然后更改为b,则它会执行相同的操作:

for a,b in states.items():
   print "%s is abbreviated %s" % (a,b)


for b,a in states.items():
   print "%s is abbreviated %s" % (b,a)

.items()获取每个键值对并将其作为元组返回。 a,b被称为tuple unpacking。它接受元组的每个成员,并将其分配给单独的变量。

因此,你所谓的变量并不重要,因为.items()将始终返回key,value对,并且它将始终按顺序

要先写下缩写,只需在print语句中切换变量的顺序:

for a,b in states.items():
    print '%s is the abbreviation for %s' % (b,a)

答案 1 :(得分:0)

词典不对称;有一个key并且有一个value且角色不可逆。

函数items()返回元组的集合,其中第一个元素是键,第二个元素是值。在第二个循环中,您反转了为密钥和值提供的名称,但变量的名称在程序之外并不重要。

答案 2 :(得分:0)

在第一个中你说的是state, abbrev,然后你正在呼叫print "%s is abbreviated %s" % (state, abbrev)。当你说state你说这是关键,然后缩写是(字典的键值对)的值。然后,当您调用打印行时,它首先是键,后面是值。

在第二部分中,您只是切换状态和缩写的顺序。程序不知道状态是指状态的全名还是缩写(反之亦然)只是一个是键而另一个是值。

所以回顾一下:

dictionary = {
key : value
}

在第一部分中,键是state,value是abbrev。在第二部分中,它是相反的。

答案 3 :(得分:0)

列表相同,但区别仅在于key, value名称。

for state, abbrev in states.items():
  print "%s is abbreviated %s" % (state, abbrev)
print "-" * 10
for abbrev, state in states.items():
  print "%s is abbreviated %s" % (abbrev, state)

在第一个for循环中,您有key = statevalue = abbrev。在第二个循环key = abbrevvalue = state

答案 4 :(得分:0)

查看for循环中变量的顺序以及它们在print语句中的反转方式。在一个循环中,它将状态名称(例如California)设置为变量'state'

for state, abbrev in states.items():
    print "%s is abbreviated %s" % (state, abbrev)

在第二个循环中,它只是反转变量:

for abbrev, state in states.items():
    print "%s is abbreviated %s" % (abbrev, state)

所以现在'abbrev'指的是“California”。因为它们按照设置的相同顺序打印,结果是相同的。我认为它只是告诉你如何分配for循环。