我希望将字典加载到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"}
谢谢,感谢您的光临。
答案 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
。