2014-01-08 60 views
1

如何删除字典中没有任何值的键。我有一个字典为:删除具有空白值的键

d = {'CB': '', 'CA': [-7.5269999504089355, -2.2330000400543213, 6.748000144958496], 'C': [-8.081000328063965, -3.619999885559082, 6.406000137329102], 'N': [-6.626999855041504, -2.318000078201294, 7.9029998779296875], 'H':''} 

我想删除键值为空。我需要输出为:

d = {'CA': [-7.5269999504089355, -2.2330000400543213, 6.748000144958496], 'C': [-8.081000328063965, -3.619999885559082, 6.406000137329102], 'N': [-6.626999855041504, -2.318000078201294, 7.9029998779296875]} 

如何做到这一点?

+2

为什么是“一条线”的要求?你有哪些困难?确定“空白”值?删除它们? – Johnsyweb

回答

4

使用的字典 - 理解:

>>> {k:v for k, v in d.items() if v != ''} 
{'N': [-6.626999855041504, -2.318000078201294, 7.9029998779296875], 'CA': [-7.5269999504089355, -2.2330000400543213, 6.748000144958496], 'C': [-8.081000328063965, -3.619999885559082, 6.406000137329102]} 

如果空你的意思是任何falsy值,那么只使用if v


如果要修改原来的字典本身(这将影响到字典对象的所有引用):

for k, v in d.items(): 
    if not v: del d[k] 
2
>> {key:value for key, value in d.items() if value} 
1

如果你真的需要做到这一点的一个行:

for k in [k for k,v in d.iteritems() if not v]: del d[k] 

这很难看。它列出d中具有“空白”值的所有密钥列表,然后遍历该列表,从d中删除密钥(以避免在迭代过程中不安全地从字典中删除项目)。

我建议三条线将更具可读性:

blanks = [k for k,v in d.iteritems() if not v] 
for k in blanks: 
    del d[k] 

如果制作一个新的dict是可以接受的,使用dict comprehension

d2 = {k:v for k,v in d.iteritems() if not v}