2014-01-08 95 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}