Python字典循环不起作用

用户3416724

我生成了以下代码来通过字典循环键

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!

为什么莎拉没有出现在输出中?

cs95

您需要将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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章