我有一个权限字典:
{'READ': True, 'WRITE': None, 'DELETE': False}
实际的字典有更多的键,但这足以满足该示例。我想迭代字典并将None
的任何值更改为False
。这可以通过for循环轻松完成,但我想知道是否有一种惯用的方法来实现列表理解。如果它是一个对象而不是字典,我会这样做:
[setattr(k, v, False) for k, v in object if v is None]
(或类似),但我不确定如何在不使用dict.__setitem__
这对解决我的问题并不是非常重要,但我只是想知道是否有更简洁的方法来做到这一点
答案 0 :(得分:6)
>>> dct = {'READ': True, 'WRITE': None, 'DELETE': False}
>>> dct = {k:v if v is not None else False for k,v in dct.items()}
>>> dct
{'READ': True, 'WRITE': False, 'DELETE': False}
>>>
注意:如果您使用的是Python 2.x,则应使用dict.iteritems
而不是dict.items
。这样做会提高效率,因为前者返回迭代器,而后者返回列表。
答案 1 :(得分:3)
不要使用列表理解副作用;在此处生成None
值列表毫无意义。
相反,使用字典理解:
{k: False if v is None else v for k, v in object.iteritems()}