我有一个可以解析为 json 或 dict 对象的字符串。我的字符串变量如下所示:
my_string_variable = "{
"a":1,
"b":{
"b1":1,
"b2":2
},
"b": {
"b1":3,
"b2":2,
"b4":8
}
}"
Run Code Online (Sandbox Code Playgroud)
当我这样做时json.loads(my_string_variable),我有一个 dict 但只保留了键“b”的第二个值,这是正常的,因为 dict 不能包含重复的键。
拥有这样的 defaultdict 的最佳方法是什么:
result = {
'a':1,
'b': [{'b1':1,'b2':2}, { 'b1':3, 'b2':2,'b4':8 } ]
}
Run Code Online (Sandbox Code Playgroud)
我已经寻找过类似的问题,但它们都将字典或列表作为输入处理,然后创建 defaultdicts 来处理重复的键。
就我而言,我有一个字符串变量,我想知道是否有一种简单的方法可以实现这一点:)
谢谢^^
我有一个像下面这样的JSON dict:
"{
"a":1,
"b":{
"b1":False,
"b2":{"b21": 2, "b22":8}
},
"c": {
"b1":True,
"b2":2,
"b4":8
},
"d":{
"b1":False,
"d1":89
}
}"
Run Code Online (Sandbox Code Playgroud)
我想检查"b1"字典中键的值,并在找到时退出b1=True。如果我检查了整个字典(包括嵌套键),但没有找到b1 = True,那么我想返回False。对于上面的示例,我的函数应返回True。
基本上,我想在第一次出现时破坏代码b1=True并遍历dict的所有键(在所有级别中),如果不存在此出现,则返回False。
这是我想出的:
def isb1True(jsonDoc):
found = False
for (key,value) in jsonDoc.iteritems():
if key=='b1':
if value==True :
found=True
break
else:
isb1True(value)
return found
Run Code Online (Sandbox Code Playgroud)
我的代码总是返回False。