3 回答

TA貢獻1817條經驗 獲得超14個贊
此代碼同時遍歷用戶和狀態:如果用戶狀態為“非活動”,則程序將在第二個 for 循環中刪除該用戶 如果用戶為“活動”,它將將此用戶添加到活動用戶字典中,當你想要要同時循環遍歷字典的鍵值對,必須使用 dict.items() 方法,items() 方法允許您同時循環遍歷每個字典元素(或元組)的項,這里的項目是用戶和狀態,這就是為什么還有2個迭代變量也命名為用戶和狀態

TA貢獻1876條經驗 獲得超7個贊
我也有同樣的困惑。給出的示例不起作用。缺少的部分是開頭的字典對象“用戶”。在本教程的那個時候,我們還沒有被告知它們。https://docs.python.org/3/library/stdtypes.html#index-50
工作版本是
users = { "John": "inactive",
"Helen": "active",
"James": "active", # and so on...
}
# Strategy: Iterate over a copy
for user, status in users.copy().items():
if status == 'inactive':
del users[user]
# Strategy: Create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status
如果您想查看內容,則可以將其打印出來。嘗試這個:
users = { "John": "inactive",
"Helen": "active",
"James": "active", # and so on...
}
# Strategy: Iterate over a copy
for user, status in users.copy().items():
if status == 'inactive':
del users[user]
print("Users after deleting.")
for user, status in users.items():
print(user, status)
users = { "John": "inactive",
"Helen": "active",
"James": "active", # and so on...
}
# Strategy: Create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status
print("active_users.items")
for user, status in active_users.items():
print(user, status)

TA貢獻1712條經驗 獲得超3個贊
簡單示例:假設您有一本實體電話簿,并想在其中查找朋友或家人。Python中的等價物是:
phone_book = { "Mom": "123-456-7890",
"Dad": "123-456-7891",
"John Doe": "555-555-5555", # and so on...
}
如果您嘗試在實體電話簿中查找您父親的電話號碼,您可以通過直接導航到您所寫的頁面并找到該條目來實現。同樣,在 Python 字典中查找也是一樣的:
print(phone_book['Dad']) # 123-456-7891
現在現實世界的例子已經很清楚了,看看你的例子。通過.items(),您正在檢索一個鍵值對,其中user只是引用users字典中特定值的鍵(如“媽媽”或“爸爸”),并且status是映射到該特定值的值user(如他們的電話號碼)。
但是,您正在獲取users字典的副本,以便您可以遍歷usersto的整個配對statuses。如果你有
for user, status in users.items():
del[user]
您將修改您嘗試迭代的字典并且會出現錯誤。為避免這種情況,您正在制作它的臨時副本以迭代并從中刪除實際副本user(users想想“從電話簿中刪除媽媽”)。
在第二個塊中,您正在將人員添加到活動用戶字典中。想想“將 Billy 添加到電話簿,電話號碼為“111-222-3344”,但在這種情況下,您要添加user和它們對應的status.
TLDR:字典只是查找內容的一種方式,但是為了查找內容,您需要知道它們的標識符(name在電話簿中,user在用戶字典中)。number如果您想使用該標識符的值(在電話簿、用戶字典中)做某事status,您需要暫時存儲它,直到您完成它。
添加回答
舉報