簡體   English   中英

Python Dictionary Loop不起作用

[英]Python Dictionary Loop doesn't work

我生成了以下代碼來循環鍵通過字典

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!

為什么莎拉沒有出現在輸出中?

解決方案是,如果條件在循環內,你只需要移動你。

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() + "!")

輸出:

Sarah
 Hi Sarah, I see your favourite language is C!
Edward
Jen
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:

這更簡單,更有效。

if語句中的name變量設置為循環后的friends的最后一個值,if語句只執行一次。

我想你想縮進if語句(並打印),以便它在循環的每次迭代中執行

你沒有循環遍歷name變量。

當您的代碼到達if name in friendsif name in friends ,存儲在name值為phil

您可以再次遍歷名稱(這會產生稍微不同的結果),或者在代碼中添加縮進。

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() + "!")

if塊縮小一級。

...
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() + "!")

if name in friends:你需要縮進if name in friends:

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() + "!")

只需將if語句移動到for循環中即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM