silently removing key from a python dict
我有一个python dict,我想悄悄地从我的字典中删除None和''键,所以我想出了如下的方法:
1 2 3 4 5 6 7 8 9
| try:
del my_dict[None]
except KeyError:
pass
try:
del my_dict['']
except KeyError:
pass |
如您所见,它的可读性较低,它会导致我编写重复的代码。所以我想知道在python中是否有一个方法可以在不引发键错误的情况下从dict中删除任何键?
- 你不是在这里混合值和键吗?
- 我很困惑,为什么一把钥匙不出现在dict.keys()中?
You can do this:P></
1 2
| d.pop("", None)
d.pop(None, None) |
词典与持久性有机污染物的默认值,你的主。P></
- 注意不要写d.pop(无),因为这会在没有提供默认值时引发keyError。
- 如何删除None值的密钥?
- knowbody:你可以按照上面的回答做:d.pop(无,无)
你可以使用dict.popignore the method and the result。P></
1 2
| for key in [None, '']:
d.pop(key, None) |
你可以试试:P></
1
| d = dict((k, v) for k,v in d.items() if k is not None and k != '') |
在empty or to remove样的钥匙P></
1
| d = dict((k, v) for k,v in d.items() if k ) |
- 不需要[,]。您正在创建一个不必要的中介列表理解。如果你把它们取下来,就会使用效率更高的发电机。
- @杰米拉克是的,没错。
将delete the following the keys are present and,if they,它不会把安误差:P></
1 2 3
| for d in [None, '']:
if d in my_dict:
del my_dict[d] |
- @ozgurv字典查找不是o(n),而是o(1)
- @Ozgurv:检查dict中的键是否为o(1),就像从dict中删除键一样。但是,它会导致执行两次查找而不是一次查找。
- @不,不是。查看数据结构的python文档的时间复杂性。你也不会在那里寻找最终会出现在摊余情况下的密钥。
- 谢谢,我不知道。我觉得有点像:如果我在我的"性感口述"中。因为.keys()返回一个列表,我考虑在列表中搜索一个元素。
- @ozgurv my_sexy_dict.keys()不是O(1),因为它首先生成一个列表(或者在python中生成一个"视图")。k in my_sexy_dict为O(1)
- @python 3 dict.keys中的ozgurv不再返回列表,因此它们实际上是相同的,因为它们应该是相同的。
- @你绝对是对的,我不明白为什么它会返回一个列表而不是一个集合。
- 我认为它返回一个列表,这样,如果您迭代keys()和values(),就可以得到键值对。(我知道,你为什么要使用items()呢?我不知道。)如果您想在dict dd中使用一组键,您可以只使用set(dd)-dict的默认迭代器是对其键进行迭代器。