22

我有一个我正在用 Python 清理的 JSON 数组。我想删除该imageData属性:

数据.json

[{"title": "foo", "imageData": "xyz123"},
{"title": "bar", "imageData": "abc123"},
{"title": "baz", "imageData": "def456"}]

我正在设置一个列表理解来删除该属性,但我不确定如何创建关注的变量imageData

import json

with open('data.json') as json_data:
    data = json.load(json_data)
    clean_data = [ item for item in data if not item['imageData'] ]
    # Write `clean_data` to new json file

当我print列表理解时,它返回一个空数组。我必须纠正什么才能使其正常工作?

4

4 回答 4

38

解决您的问题的一个简单方法是删除不需要的密钥,使用del

import json

with open('data.json') as json_data:
    data = json.load(json_data)
    for element in data: 
        del element['imageData'] 

您应该添加一些安全检查,但您明白了。

于 2013-10-03T19:24:50.677 回答
18

如果不是所有元素都有一个imageData键,那么 usingdel将导致KeyError异常。pop您可以通过使用默认值来防止这种情况:

for item in data: 
    item.pop('image', None)
于 2013-10-03T19:27:53.760 回答
2
[ item for item in data if not item['imageData'] ]

是空的,因为都有imageData。您只是在测试它,而不是删除它。

循环date遍历del item['imageData']每个item.

于 2013-10-03T19:24:43.880 回答
1

怎么样:
clean_data = [k:v for k,v in data.iteritems() if k != 'imageData']

或者如果您想要字典,请使用字典表达/理解:
clean_data = {k:v for k,v in data.iteritems() if k != 'imageData'}

于 2013-10-03T20:28:27.827 回答