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”或任何键传递给该函数,则应返回值;如果嵌套字典中的键也应返回该值。
我该如何实现?
答案 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'))
我将检查所有示例,以了解该功能是否符合您的喜好。请注意,如果'a'
的值是字典,则它将向列表中添加字典,并且如果'a'
的字典值也具有键{{1} },这两个级别都将添加到字典中(请参见第五个示例)。同样,即使只有一个匹配项,它仍然会返回一个列表。
在此示例中,d是输入字典的名称:
'a'