艰苦学习Python-练习39
在艰苦学习Python的练习39中,第37到39行如下所示:艰苦学习Python-练习39,python,python-2.7,dictionary,tuples,enumeration,Python,Python 2.7,Dictionary,Tuples,Enumeration,在艰苦学习Python的练习39中,第37到39行如下所示: print "-"*10 for state, abbrev in states.items(): print "%s has the city %s" % (state, abbrev) 我想我明白了。我认为Python是从“states”中获取KEY:VALUE,并将KEY分配给“state”,将VALUE分配给“abbrev” 然而,当我输入以下代码时,我发现发生了一些奇怪的事情: print "-"*10 for t
print "-"*10
for state, abbrev in states.items():
print "%s has the city %s" % (state, abbrev)
我想我明白了。我认为Python是从“states”中获取KEY:VALUE,并将KEY分配给“state”,将VALUE分配给“abbrev”
然而,当我输入以下代码时,我发现发生了一些奇怪的事情:
print "-"*10
for test in states.items():
print "%s has the city %s" % (test)
它产生与原始代码相同的输出。
但是,只有将%s
放入print语句中两次,它才会起作用
有人能解释一下“测试”是怎么回事吗?
“测试”到底是什么?是元组吗?
它似乎同时包含来自states.items()
的键和值
我已经在这里浏览了练习39中的一些其他问题,但没有找到相同的问题
下面列出了代码(对于Python 2.7)
states
是一个字典,因此当您调用以在states.items()中进行测试时,它会将字典的每个项(一个元组
)分配给测试
然后,您只需迭代这些项并打印它们的键和值,就像在state中使用一样,abbrev in states.items():
所有详细信息均可在线获取,例如在字典迭代器下:
-
字典实现了一个tp_iter插槽,该插槽返回一个有效的迭代器,该迭代器对字典的键进行迭代。[…]这意味着我们可以写作
for k in dict: ...
这相当于,但比
for k in dict.keys(): ...
只要不违反对字典(由循环或另一个线程)修改的限制
-
将方法添加到显式返回不同类型迭代器的字典:
for key in dict.iterkeys(): ...
for value in dict.itervalues(): ...
for key, value in dict.iteritems(): ...
这意味着dict中x的是dict中x的的缩写
dict.iterkeys()
第一个代码段和第二个代码段之间的“缺失链接”解释了为什么它们是等效的:
print "-"*10
for test in states.items():
state, abbrev = test
print "%s has the city %s" % (state, abbrev)
您不必使用states.items(),字典的默认iterable是keySo如果我理解的话,“test”相当于“for k in dict”,当您使用print语句进行迭代时,您必须有两个%s实例,因为“test”既有键也有值?是的,修饰符%s
是一个字符串,所以它希望您有两个,因为您正在尝试打印一个字典条目,它有一个键和一个值:)太好了,非常感谢。起初,我试过那个“测试”只是为了打破它,但当它给我那个结果时,我很惊讶。帮了大忙,谢谢大家!
for key in dict.iterkeys(): ...
for value in dict.itervalues(): ...
for key, value in dict.iteritems(): ...
print "-"*10
for test in states.items():
state, abbrev = test
print "%s has the city %s" % (state, abbrev)