有没有更好的方法来解析python字典?

有没有更好的方法来解析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字典,我需要检查数据的值,看看是否有匹配项。我使用多个if语句和in运算符,如下所示:

一些数据: { 伊斯特鲁:是的, 额外数据: { MyID:1223 } } 我知道在python3中应该使用in操作符,但我认为一定有比使用我现在使用的多个if语句更好的方法。
有没有更好的方法来解析这样的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 ...