首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python字典循环不起作用

Python字典循环不起作用
EN

Stack Overflow用户
提问于 2017-07-12 19:58:51
回答 7查看 221关注 0票数 2

我生成了以下代码来遍历字典中的键

代码语言:javascript
复制
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() + "!")

产生的输出是

代码语言:javascript
复制
Jen
Sarah
Edward
Phil
 Hi Phil, I see your favourite language is Python!

然而,我期望的是:

代码语言:javascript
复制
Jen
Sarah
 Hi Sarah, I see your favourite language is C!
Edward
Phil
 Hi Phil, I see your favourite language is Python!

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-07-12 20:02:31

您需要将if语句移到循环中。在其当前状态下,它在外部,因此只能访问name接受的最后一个值。

此外,我建议您将friends存储为一个集合,以便快速高效地查找。

代码语言:javascript
复制
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))。对于您的特定用例,这可能无关紧要,但sets确实能处理大量数据。

作为进一步的改进,您不需要调用dict.keys(),因为这会为循环创建一个要迭代的键列表,这有点浪费。同样的事情也可以通过以下方式实现:

代码语言:javascript
复制
for name in favourite_languages:

这更简单,效率更高。

票数 3
EN

Stack Overflow用户

发布于 2017-07-12 20:04:49

解决方案是,你只需将if条件移到循环中即可。

代码语言:javascript
复制
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() + "!")

输出:

代码语言:javascript
复制
Sarah
 Hi Sarah, I see your favourite language is C!
Edward
Jen
Phil
 Hi Phil, I see your favourite language is Python!
票数 4
EN

Stack Overflow用户

发布于 2017-07-12 20:01:55

if语句中的name变量被设置为循环后friends的最后一个值,并且if语句只执行一次。

我认为您应该缩进if语句(并打印),以便在循环的每次迭代中执行该语句

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45057098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档