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 1
我觉得你应该是想这样?
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 1
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 1
我看傻了,你把 '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 解包命名不规范自己搞蒙了😰
|
11
MoYi123 2020-05-18 22:53:20 +08:00 via Android
你在这秀操作呢
|
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
边遍历边删除遍历的对象? 确定没问题吗?
|