列表理解期间的Python字典分配

axo*_*xon 1 python list-comprehension

我有一个权限字典,如下:

{'READ': True,  'WRITE': None, 'DELETE': False}
Run Code Online (Sandbox Code Playgroud)

实际字典有更多的键,但这足以满足该示例.我想迭代字典并更改Noneto的任何值False.这可以通过for循环轻松完成,但我想知道是否有一种惯用的方法来实现列表理解.如果它是一个对象而不是字典,我会这样做:

[setattr(k, v, False) for k, v in object if v is None]
Run Code Online (Sandbox Code Playgroud)

(或类似的),但我不知道如何在不使用的情况下这样做 dict.__setitem__

这对解决我的问题并不是非常重要,但我只是想知道是否有更简洁的方法来解决我的问题

iCo*_*dez 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}
>>>
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是Python 2.x,则应使用dict.iteritems而不是dict.items.这样做会提高效率,因为前者返回迭代器,而后者返回列表.