Python 中 del users[user]没有删除,反倒另外一个元素被删除了,这是为什么

2020-05-18 20:25:20 +08:00
 iszengmh
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 却被删除了。初学者请多指教。

3028 次点击
所在节点    Python
16 条回复
dbow
2020-05-18 20:30:20 +08:00
用 users.deep_copy()
mayorbryant
2020-05-18 20:30:23 +08:00
`dict().items()` 返回的是[(key, value),...]
不删 status 删哪个?不要被变量名和字符串搞混了
LincolnZh
2020-05-18 20:32:13 +08:00
删除 users 中 user 对应元素引用时要加引号的吧?

比如 del users[‘user’]

del users[user]是无法编译通过的
dbow
2020-05-18 20:34:09 +08:00
@dbow #1 草, 看错了, 原来是变量跟字符串不分导致的。
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'}
wildestdream
2020-05-18 20:40:30 +08:00
user 和 status 在遍历的第一次的值分别是
user=user
status=admin
不满足 if 中的条件 不会删除这个键值对
在遍历的第二次中
user=status
status=inactive
满足 if 中的条件,所以会删除此键值对
最后输出 users,就会输出
{'user': 'admin'}
customsshen
2020-05-18 21:21:40 +08:00
users = {'user':'admin','status':'inactive'}
if users['status'] == 'inactive':
del users['user']
print(users)
misaka19000
2020-05-18 21:27:00 +08:00
我看傻了,你把 'status':'inactive' 删了,剩下的就是 {'user': 'admin'}

这样有什么问题吗????
Yourshell
2020-05-18 21:44:26 +08:00
你先把循环中的 user 打印出来看看就懂了
malone6
2020-05-18 21:45:57 +08:00
你这 for 解包命名不规范自己搞蒙了😰
MoYi123
2020-05-18 22:53:20 +08:00
你在这秀操作呢
aragakiyuii
2020-05-19 07:18:50 +08:00
工作中这么写怕不是要被人打死😂
cominghome
2020-05-19 09:21:03 +08:00
一脸懵逼地进来,一脸懵逼地出去。。。不会用断点好歹 print 一下啊
jacklin96
2020-05-19 10:48:33 +08:00
让我想起了那个姓万的学写字的故事
如果 users 里有一万个 key...
nekochyan
2020-05-19 11:30:51 +08:00
搞清楚 del users[user]中的 user 到底是什么就知道了,你这里的 user 是变量名不是字符串吧
HashV2
2020-05-20 17:50:57 +08:00
边遍历边删除遍历的对象? 确定没问题吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/673010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX