我如何在python中动态遍历特定键?

时间:2018-07-29 01:52:41

标签: python-3.x

Probelm声明:

response= [{'HotelId': 8, 'IsFast': False, 'Payload': {'HotelInstaceId': 8, 'IsResetNeeded': False, 'HotelType': 'test', 'Product': {'Family': 'Times', 'Model': 'Roman', 'Type': 'Visible', 'Vendor': 'Royal'}, 'Hotel': {'DisplayBrightness': 80, 'LedColor': None, 'Location': '', 'Name': 'testing'}}}]

我要验证名称“ testing”的值。

我的代码:

result = response["Data"][0]["Payload"]["Name"]
if result == "testing":
   print("pass")
else:
   print("fail")

新代码:

tests = [{'a': 1},
         {'b': {'a': 2}},
         {'a': 3, 'b': {'a': 4}},
         {'a': {'b': 5}},
         {'a': {'a': 6}}]
def recursively_find_dict_values(self, d, tests, key="HotelType"):
    output = []
    for i, v in d.items():
        if i == key:
            output.append(v)
        if isinstance(v, dict):
            output.extend(self.recursively_find_dict_values(v, key, tests))
    return output

for t in tests:
    recursively_find_dict_values(t, key="HotelType")

我将从另一个函数获得响应,并且该响应我将作为参数发送到“ recursively_find_dict_values” func。

示例输入:

Input keys                            Output 

 "Name"                               "testing"
 "DisplayBrightness"                   80
 "HotelType"                           "test"

但是我想以通用的方式进行操作,例如,如果我将“名称”或“ DisplayBrightness”或任何键传递给该函数,则应返回值;如果嵌套字典中的键也应返回该值。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

我认为这可以为您提供帮助:

def recursively_find_dict_values(d, key):
    output = []
    for i,v in d.items():
        if i == key:
            output.append(v)
        if isinstance(v, dict):
            output.extend(recursively_find_dict_values(v, key))
    return output

tests = [{'a': 1},
         {'b': {'a': 2}},
         {'a': 3, 'b': {'a': 4}},
         {'a': {'b': 5}},
         {'a': {'a': 6}}]

for t in tests:
    print(recursively_find_dict_values(t, 'a'))

Try it online!

我将检查所有示例,以了解该功能是否符合您的喜好。请注意,如果'a'的值是字典,则它将向列表中添加字典,并且如果'a'的字典值具有键{{1} },这两个级别都将添加到字典中(请参见第五个示例)。同样,即使只有一个匹配项,它仍然会返回一个列表。


在此示例中,d是输入字典的名称:

'a'