users = {'user':'admin','status':'inactive'} # Strategy: Iterate over a copy for user, status in users.copy().items(): if status == 'inactive': print('删除 key 为 user 的元素') del users[user] print(users) # {'user': 'admin'}
输出了 删除 key 为 user 的元素 {'user': 'admin'}
为什么 user 没有被删除,而 status 却被删除了。初学者请多指教。
1 dbow 2020-05-18 20:30:20 +08:00 用 users.deep_copy() |
![]() | 2 mayorbryant 2020-05-18 20:30:23 +08:00 `dict().items()` 返回的是[(key, value),...] 不删 status 删哪个?不要被变量名和字符串搞混了 |
![]() | 3 LincolnZh 2020-05-18 20:32:13 +08:00 via iPhone 删除 users 中 user 对应元素引用时要加引号的吧? 比如 del users[‘user’] del users[user]是无法编译通过的 |
![]() | 5 n329291362 2020-05-18 20:37:56 +08:00 ![]() 我觉得你应该是想这样? users = [{'user':'admin','status':'inactive'}] # Strategy: Iterate over a copy for index in range(len(users)): user = users[index] if user['status'] == 'inactive': print('删除 key 为 user 的元素') del users[index] print(users) # {'user': 'admin'} |
![]() | 6 wildestdream 2020-05-18 20:40:30 +08:00 ![]() user 和 status 在遍历的第一次的值分别是 user=user status=admin 不满足 if 中的条件 不会删除这个键值对 在遍历的第二次中 user=status status=inactive 满足 if 中的条件,所以会删除此键值对 最后输出 users,就会输出 {'user': 'admin'} |
7 customsshen 2020-05-18 21:21:40 +08:00 users = {'user':'admin','status':'inactive'} if users['status'] == 'inactive': del users['user'] print(users) |
![]() | 8 misaka19000 2020-05-18 21:27:00 +08:00 ![]() 我看傻了,你把 'status':'inactive' 删了,剩下的就是 {'user': 'admin'} 这样有什么问题吗???? |
![]() | 9 Yourshell 2020-05-18 21:44:26 +08:00 你先把循环中的 user 打印出来看看就懂了 |
10 malone6 2020-05-18 21:45:57 +08:00 via Android 你这 for 解包命名不规范自己搞蒙了 |
![]() | 12 aragakiyuii 2020-05-19 07:18:50 +08:00 via Android 工作中这么写怕不是要被人打死 |
![]() | 13 cominghome 2020-05-19 09:21:03 +08:00 一脸懵逼地进来,一脸懵逼地出去。。。不会用断点好歹 print 一下啊 |
14 jacklin96 2020-05-19 10:48:33 +08:00 让我想起了那个姓万的学写字的故事 如果 users 里有一万个 key... |
![]() | 15 nekochyan 2020-05-19 11:30:51 +08:00 搞清楚 del users[user]中的 user 到底是什么就知道了,你这里的 user 是变量名不是字符串吧 |
![]() | 16 HashV2 2020-05-20 17:50:57 +08:00 边遍历边删除遍历的对象? 确定没问题吗? |