python - 如果值是python中的键,则删除字典的值
问题描述
我有一本字典,我想删除作为键的字典的每个值。我想要这个输出:G = {'y': {'z'}, 'z': {'u', 'f', 'y'}, 'u': {'z'}}
G = {'y': {'z', 'y'}, 'z': {'z', 'u', 'f', 'y'}, 'u': {'u', 'z'}}
我试过这个,但我知道。这是错的。
for key,value in G.items():
if key == value:
del value
解决方案
您不是在修改字典,而是在修改变量value
。此外,您不想寻找键和值的相等性,您想检查您的键是否是in
您的设置值。然后通过 将其从您的集合中删除set.remove
。所以你可以使用:
for key, value in G.items():
if key in value:
G[key].remove(key)
print(G)
{'y': {'z'}, 'z': {'u', 'y', 'f'}, 'u': {'z'}}
或者,您可以使用,如果您的集合中不存在该值set.discard
,它不会给出。因此可以省略KeyError
该条件。if
for key, value in G.items():
G[key].discard(key)
最后,考虑下面的字典理解,它创建一个新字典并将其分配给G
. 这本质上并不是低效的:时间复杂度将与上述方法相同。这个版本使用set.difference
, 这里通过它的语法糖-
:
G = {k: v - {k} for k, v in G.items()}
G
根据@JonClements 的评论,可以通过以下方式维护引用的单行版本dict.update
:
G.update({k: v - {k} for k, v in G.items()})
推荐阅读
- flutter - 如何在 Dart 中为条件导入设置自定义属性?
- python - 使用python将html页面导出为pdf格式
- javascript - 回调函数不适用于 for 循环
- cisco - Cisco ios 命令了解 L2 和 L3 设备
- git - 如何避免 GIT 在合并时删除以前还原的更改?
- matplotlib - 逻辑回归的梯度下降不收敛
- javascript - 编剧 page.click 滚动太多
- c - 嵌入式 C:初始化全局数据的风险
- php - Apache2 2.4 访问 phpmyadmin 时出错:FCGI:尝试连接到 Unix 域套接字 /run/php/php7.4-fpm.sock (*) failed
- elasticsearch - search_after 在弹性搜索中如何工作?