如果value为空,则删除词典列表中的项目,在Python中为“null”或None

时间:2016-01-28 14:46:20

标签: python json

我有一个$long对象,其中包含各种不必要的值,例如JSON"null"""。如果它包含这样的值,我想删除整个对象。

None

我失败的尝试:

>>> json.dumps(event, indent=4)
"event" = {
    "status": "COMPLETED",  
    "dataValues": [
    {
        "key": "wiiDcsQ5pdQ",
        "value": "25"
    },
    {
        "key": "RsZ4gQzWPWU",
        "value": "null"
    },
    {
        "key": "L7aO70bcrbP",
        "value": ""
    },
    {
        "key": "gY6pXRwdThm",
        "value": "null"
    },
    {
        "key": "x1708y0C4C7",
        "value": False
    }
    ]
}

我该怎么办?

2 个答案:

答案 0 :(得分:2)

这适用于我,我将数据存储在变量中,并使用您的第一个列表推导进行评估。请注意,我使用了一组ignored_values,这稍快一点:

In [12]: import json

In [13]: json_text = """{
    "status": "COMPLETED",  
    "dataValues": [
    {
        "key": "wiiDcsQ5pdQ",
        "value": "25"
    },
    {
        "key": "RsZ4gQzWPWU",
        "value": "null"
    },
    {
        "key": "L7aO70bcrbP",
        "value": ""
    },
    {
        "key": "gY6pXRwdThm",
        "value": null
    },
    {
        "key": "x1708y0C4C7",
        "value": false
    }
    ]
}"""

In [14]: data = json.loads(json_text)

In [15]: ignored_values = set(["null", "", None])

In [16]: [elem for elem in data['dataValues'] if elem['value'] not in ignored_values]
Out[16]: 
[{u'key': u'wiiDcsQ5pdQ', u'value': u'25'},
 {u'key': u'x1708y0C4C7', u'value': False}]

答案 1 :(得分:1)

我认为这就是你想要的;

ignored_values = ['null', '', None]
data_values = event['dataValues']

In [36]: event['dataValues'] = filter(lambda x: x['value'] not in  ignored_values, data_values) 
In [37]: event
Out[37]:
{'dataValues': [{'key': 'wiiDcsQ5pdQ', 'value': '25'},
  {'key': 'x1708y0C4C7', 'value': False}],
 'status': 'COMPLETED'}