3

给定项目的字典

sample = { 'a':1 , 'b':2 , 'c':3 , 'd':None , 'e':None }

我想创建一个新的字典,它只包含具有值的项目。

这有效..

a = dict([ i for i in testing.iteritems() if i[1]])

但我想知道是否有更多的pythonic/可读性。

我希望我能做类似的事情

a = dict([ i for i in testing.____() if i.value() ])

但是没有像这样工作的标准迭代器。

出于可读性目的,我对此感到好奇。

4

3 回答 3

3

你可以使用dict comprehension: -

>>> {key: value for key, value in sample.iteritems() if value}
0: {'a': 1, 'b': 2, 'c': 3}

注意:如果使用 python 3,那么只需使用 sample.items() 因为这是 2.7 和 3 不同的地方。

于 2013-02-01T21:19:27.387 回答
2

使用元组解包(将每个键和值分配给单独的变量,kv以下示例中)和字典理解:

a = {k: v for k, v in sample.iteritems() if v}

或显式测试None而不是所有虚假值(数字 0、空序列等):

a = {k: v for k, v in sample.iteritems() if v is not None}

在 Python 3 中,您只需要使用items()

a = {k: v for k, v in sample.items() if v}

对于您的样本,上述所有变化都会导致:

>>> sample = { 'a':1 , 'b':2 , 'c':3 , 'd':None , 'e':None }
>>> {k: v for k, v in sample.iteritems() if v}
{'a': 1, 'c': 3, 'b': 2}
于 2013-02-01T21:18:56.683 回答
0

蟒蛇 3:

sample =  {'a': 1, 'e': 0, 'd': None}
k = {k: v for k, v in sample.items() if v is not None}

>>> k
{'a': 1, 'e': 0}
于 2013-02-01T21:22:54.743 回答