[英]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 friends
的if 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.