Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表理解期间的Python字典分配_Python_List Comprehension - Fatal编程技术网

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

列表理解期间的Python字典分配,python,list-comprehension,Python,List Comprehension,我有一个权限字典,例如: {'READ': True, 'WRITE': None, 'DELETE': False} 实际的字典有更多的键,但这就足够了。我想遍历字典,并将None的任何值更改为False。使用for循环可以很容易地做到这一点,但我想知道是否有一种惯用的方法可以通过列表理解来做到这一点。如果它是一个对象而不是一本字典,我会: [setattr(k, v, False) for k, v in object if v is None] (或类似),但我不知道如果不使用dic

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

{'READ': True,  'WRITE': None, 'DELETE': False}
实际的字典有更多的键,但这就足够了。我想遍历字典,并将
None
的任何值更改为
False
。使用for循环可以很容易地做到这一点,但我想知道是否有一种惯用的方法可以通过列表理解来做到这一点。如果它是一个对象而不是一本字典,我会:

[setattr(k, v, False) for k, v in object if v is None]
(或类似),但我不知道如果不使用
dict.\uuuuuuu setitem\uuuuuu

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

您是否考虑过:

注意:如果您使用的是Python2.x,那么应该使用而不是
dict.items
。这样做将提高效率,因为前者返回迭代器,后者返回列表。

您是否考虑过:


注意:如果您使用的是Python2.x,那么应该使用而不是
dict.items
。这样做将提高效率,因为前者返回一个迭代器,后者返回一个列表。

不要对副作用使用列表理解;在此处生成
None
值列表没有意义

相反,使用听写理解:

{k: False if v is None else v for k, v in object.iteritems()}

不要使用列表理解副作用;在此处生成
None
值列表没有意义

相反,使用听写理解:

{k: False if v is None else v for k, v in object.iteritems()}

为什么不直接使用循环而不是创建一个新的dict呢?@KDawG我理解,但它看起来像是在不必要的时候尝试“惯用”。@arshajii:既然你必须测试所有的键,dict理解就是惯用的。是的,我认为惯用是错误的词。我想说的是:尽管修改dict(即使用一个简单的循环)不是更好吗?这取决于这里替换了多少值,以及目标是什么。性能还是可读性?因为您使用的是高级Python语法(是的,这显然是使用dict理解的原因)。我同意一个简单的循环可能会表现得更好。为什么不直接使用循环而不是创建一个新的dict呢?@KDawG我理解,但它看起来像是在不必要的时候尝试“惯用”。@arshajii:既然你必须测试所有的键,那么dict理解就是惯用的。是的,我认为惯用是错误的词。我想说的是:尽管修改dict(即使用一个简单的循环)不是更好吗?这取决于这里替换了多少值,以及目标是什么。性能还是可读性?因为您使用的是高级Python语法(是的,这显然是使用dict理解的原因)。我同意简单的循环可能会执行得更好。