从字典中将指定的键值加载到json对象中

时间:2019-06-28 13:26:21

标签: python json dictionary parsing

我希望将字典加载到json对象中,而不是所有键和值中。

示例字典:

full_dict = {
            'code': 1,
            'length': 20,
            'height': 45,
            'name':"book"
        }

我想将其设为json对象,并且已经使用

json.dumps(full_dict)

但是我只想上载该词典中的选定字段,就像仅在这些字段中一样:

part_dict = {
            'length':20,
            'height':45,
            'name':"book"
        }

总结一下,我想使用:

json.dumps(full_dict)

并期望以下json对象:

{"length": 20, "height": 45, "name": "book"}

谢谢,感谢您的光临。

5 个答案:

答案 0 :(得分:2)

您可以在将字典写入磁盘之前对其进行过滤:

full_dict = {
            'code': 1,
            'length': 20,
            'height': 45,
            'name':"book"
        }

keep = ['length', 'height', 'name']

partial_dict = {k: v for k, v in full_dict.items() if k in keep}
print(partial_dict)

如果字段很多,那么将其变成用于O(1)查找的字典是一种简单的优化。

答案 1 :(得分:2)

我将始终保留要保留或丢弃的密钥列表,或通过其他任何方式确定所需的密钥。

然后仅过滤字典并创建一个新字典以保存(将其封装为可重复使用代码的函数):

keys_to_keep = {'length', 'height', 'name'}

part_dict = {key: value for (key: value) in full_dict.items() if key in keys_to_keep}
json.dumps(part_dict)

dict.items()产生您可以迭代的键和值对,keys_to_keep是一个集合,以便在in中检入O(1)(在写这一切时出现的其他答案)列出在in中检查O(n)的地方!)。

答案 2 :(得分:1)

Python 3.6

exclusion_list = ['code']
json.dumps({x:y for x,y in full_dict.items() if x not in exclusion_list)

inclusion_list = ['height', 'length', 'name']
json.dumps({x:y for x,y in full_dict.items() if x in inclusion_list )

答案 3 :(得分:1)

您可以过滤键

import json

full_dict = {
    'code': 1,
    'length': 20,
    'height': 45,
    'name':"book"
}

filtered = dict([(k, v) for k, v in full_dict.items() if k in ['length', 'height', 'name']])

print(json.dumps(filtered))
  

{“长度”:20,“高度”:45,“名称”:“书”}

答案 4 :(得分:1)

您可以将自定义JSONEncoder类与覆盖的encode方法一起使用,以pop从输入code的{​​{1}}键中退出

dict

示例:

class CustomJSONEncoder(json.JSONEncoder): 
    def encode(self, input_obj): 
        if isinstance(input_obj, dict): 
            _ = input_obj.pop('code', None) 
        return super().encode(input_obj) 

如图所示,将编码器类作为In [837]: class CustomJSONEncoder(json.JSONEncoder): ...: def encode(self, input_obj): ...: if isinstance(input_obj, dict): ...: _ = input_obj.pop('code', None) ...: return super().encode(input_obj) ...: In [838]: full_dict = { ...: 'code': 1, ...: 'length': 20, ...: 'height': 45, ...: 'name':"book" ...: } In [839]: json.dumps(full_dict, cls=CustomJSONEncoder) Out[839]: '{"length": 20, "height": 45, "name": "book"}' 参数传递给cls