我将使用下面的嵌套字典作为json
示例:
{
"DICT": {
"List of dict": [
{ #first dict inside the outer list
"K1": "V1",
"K2": "V2",
"K3": "V3",
"K4": [
{
"K4_1_1": "V4_1"
},
{
"K4_2_1": "V4_2"
},
{
"K4_3_1": null
}
],
"K5 is a list of Dict": [
{
"K5_1_1": "V5_1",
"K5_1_2": "V5_2",
"K5_1_3": "V5_3",
"K5_1_4": "V5_4"
},
{
"K5_2_1": "V5_1",
"K5_2_2": "V5_2",
"K5_2_3": "V5_3",
"K5_2_4": "V5_4"
}
]
},
{ #second dict in the outerlist
"K1": "V1",
"K2": "V2",
"K3": "V3",
"K4": [
{
"K4_1_1": "V4_1_1"
},
{
"K4_2_1": "V4_2_1"
}
],
"K5": {
"K5_1_1": "V_1_1",
"K5_1_2": "V_1_2",
"K5_1_3": null,
"K5_1_4": null
}
}
]
}
}
请注意,
K4
和K5
始终是dict
列表。我需要摆脱所有的空值,无论它们在字典内部还是在列表内部有多深。因此,我编写了以下Python函数,但输出结果仍然相同,所有的 None
值仍然存在:def RemoveNones(Dict):
for k, v in Dict.items():
if type(v) == collections.OrderedDict:
RemoveNones(v)
elif type(v) == list:
for i in v:
RemoveNones(i)
else:
Dict = dict((K,V) for K,V in Dict.items() if V!=None)
我的字典不是dict
,而是<class 'collections.OrderedDict'>
。
json.load(f)
转到了json.JSONDecoder(object_pairs_hook=OrderedDict).decode(raw_text)
?是为了使输出与输入顺序相同吗?至于我的==
和!=
,我来自 C++ 背景。 - Hadi Farahjson.load(f)
生成常规的dict
对象(而不是OrderedDicts
),因此您会失去元素的顺序。 - Richard Inglis{ }
。 - Richard Inglis{}
,因为后来我会使用gettext()
处理空括号,但不处理None
值。 - Hadi Farahis
和==
的解释:https://dev59.com/X2Yq5IYBdhLWcg3wui_F - Richard Inglis