我正在关注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循环中反转顺序?
注意:谢谢你的回答。 Stackoverflow告诉我,为了在我的问题中添加任何内容,我应该编辑问题而不是添加新评论....
答案 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 = state
和value = abbrev
。在第二个循环key = abbrev
和value = 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循环。