我生成了以下代码来通过字典循环键
favourite_languages = {
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
}
friends = ['sarah', 'phil']
for name in favourite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title() + ", I see your favourite language is " +
favourite_languages[name].title() + "!")
产生的输出是
Jen
Sarah
Edward
Phil
Hi Phil, I see your favourite language is Python!
但是,我期待以下内容:
Jen
Sarah
Hi Sarah, I see your favourite language is C!
Edward
Phil
Hi Phil, I see your favourite language is Python!
为什么莎拉没有出现在输出中?
您需要将if
语句移动到循环中。在其当前状态下,它在外部,因此只能访问最后出现的值name
。
此外,我建议您将您的存储friends
为一组,以便快速有效地查找。
In [193]: favourite_languages = {
...: 'jen':'python',
...: 'sarah':'c',
...: 'edward':'ruby',
...: 'phil':'python'
...: }
...:
...: friends = {'sarah', 'phil'}
...: for name in favourite_languages.keys():
...: print(name.title())
...:
...: if name in friends:
...: print(" Hi " + name.title() + ", I see your favourite language is " +
...: favourite_languages[name].title() + "!")
...:
Phil
Hi Phil, I see your favourite language is Python!
Jen
Edward
Sarah
Hi Sarah, I see your favourite language is C!
集合具有恒定的时间(O(1))
查找,而列表是线性的(O(n))
。对于您的特定用例而言,这可能无关紧要,但集合确实可以处理大量数据。
作为进一步的改进,您不需要调用dict.keys()
,因为这会为循环创建一个键列表以进行迭代,这有点浪费。同样的事情可以通过以下方式实现:
for name in favourite_languages:
这更简单,更有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句