有没有更好的方法来解析python字典?
我有一个json字典,我需要检查数据的值,看看是否有匹配项。我使用多个if语句和in运算符,如下所示: 一些数据: { 伊斯特鲁:是的, 额外数据: { MyID:1223 } } 我知道在python3中应该使用in操作符,但我认为一定有比使用我现在使用的多个if语句更好的方法。有没有更好的方法来解析python字典?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一个json字典,我需要检查数据的值,看看是否有匹配项。我使用多个if语句和in运算符,如下所示: 一些数据: { 伊斯特鲁:是的, 额外数据: { MyID:1223 } } 我知道在python3中应该使用in操作符,但我认为一定有比使用我现在使用的多个if语句更好的方法。 有没有更好的方法来解析这样的json数据?是的,您可以假设键存在,但如果键不存在,就会捕获一个键错误 try: some_data = json_data['SomeData'] is_a_match
有没有更好的方法来解析这样的json数据?是的,您可以假设键存在,但如果键不存在,就会捕获一个键错误
try:
some_data = json_data['SomeData']
is_a_match = (
some_data['IsTrue'] is True and
some_data['ExtraData']['MyID'] == "1234"
)
except KeyError:
is_a_match = False
这种样式被称为,并且在Python中被大量使用。另一种方法是,在解决方案中使用它。我建议编写一个路径函数来访问嵌套字典中的值。类似于此伪代码的内容:
def get_path_value(json_dict, path):
"""
json_dict - dictionary with json keys and values
path - list of key sequences, e.g. ['SomeData', 'IsTrue']
you can make this a helper function and use an entry point that
splits paths, e.g. "SomeData/IsTrue"
"""
if len(path) == 1:
# last tag, base case
return json_dict[path[0]]
else:
return get_path_value(json_dict[path[0]], path[1:])
如果您想要的不是坏键,请添加try/catch,但这将使您能够更雄辩地浏览字典。然后你会有这样的事情:
if get_path_value(json_dict, ["SomeData", "IsTrue"]) == True and ...
您甚至可以编写一个漂亮的小类来总结这一切,例如json[SomeData/IsTrue]==True
祝你好运,
Marie您能分享一个json示例吗?问题用示例数据更新查看Glom,它是一个非常适合您的用例的库。
if get_path_value(json_dict, ["SomeData", "IsTrue"]) == True and ...