【发布时间】:2021-08-11 17:51:41
【问题描述】:
我正在阅读 Python 的官方教程,在循环部分中,它提出了两种更改字典的策略(作为新手,我发现这很棘手,因为我有时会为这类事情获取索引超出范围的错误) . 1. 创建一个副本,以及 2. 创建一个新集合。
以下是Python官网提供的代码(用户列表由我添加)。
def try_loop_iterate_copy():
users = {'amy': 'inactive', 'lily': 'active', 'poppy': 'active'}
#Strategy: Iterate over a copy
for user, status in users.copy().items():
if status == 'inactive':
del users[user]
print(users)
结果:
{'lily': 'active', 'poppy': 'active'}
def try_loop_new_collection():
users = {'amy': 'inactive', 'lily': 'active', 'poppy': 'active'}
# Strategy: Create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status
print(active_users)
结果:
{'lily': 'active', 'poppy': 'active'}
我得到了相同的结果,但是我无法理解为什么active_users[user] = status 会以它的方式工作。为什么将状态分配给active_users[user],并设法在新列表中获取活动用户的完整列表及其状态?我很感激新手的解释。
【问题讨论】:
-
“更改列表”?还是“改变字典”?还有什么你不知道
active_users[user] = status是如何工作的?这类似于将项目花费到列表中。就在这种情况下,它会追加/值 -
你能详细说明你没有得到的部分吗?
-
执行此操作的更简单(且更“Pythonic”IMO)的方法是:
users = {user: status for user, status in users.items() if status != 'inactive'} -
这真是太好了,谢谢 Samwise!
标签: python dictionary iteration