当特定键值在嵌套字典中匹配时,如何打印多个键值

时间:2020-09-09 22:53:56

标签: python dictionary nested key-value

我有一个嵌套的字典,其中包含从json提取的键值对的字典。例如,一个嵌套字典叫做“ some_dict”:

{1: {'address': 'some address', 'status': 'some status', 'name': 'some name'},
 2: {'address': 'some other address', 'status': 'some other status', 'name': 'some other name'}}

我需要在此嵌套字典中搜索键“状态”的特定值,并在匹配时返回该字典的所有值。但是,我在实现过程中不断收到一个关键错误,我不知道为什么。

# Based on this answer: https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-dictionaries-and-lists

def has_key_value(data, target):
    for key, value in data.items():
        if isinstance(value, dict):
            yield from has_key_value(value, target)
        elif key == target:
            return true

for x in range(1, len(some_dict)):
    if has_key_value(x, 'some status'):
        #print the dictionary

我已经走了这么远,但是我一生都无法弄清楚如何在嵌套的some_dict中返回字典的内容。我尝试了几件事,最后来到了什么样的作品:

for x in range(1, len(some_dict)):
    if has_key_value(x, 'some status'):
        print(some_dict[x])

除了在打印前3个词典之后,它都会引发'KeyError:4'错误。我检查了some_dict中的所有词典在它们的架构上是否相同,因此我无法弄清楚为什么会出错。 有想法吗?

1 个答案:

答案 0 :(得分:3)

您似乎正在使这一过程变得不必要的复杂。您似乎没有多层嵌套,因此不必递归。而且您只关心status键是否匹配给定值,而不匹配其他任何键。

for d in some_dict.values():
    if d['status'] == 'some status':
        print(d)