获取嵌套字典的所有键[重复]

Posted

技术标签:

【中文标题】获取嵌套字典的所有键[重复]【英文标题】:Get all keys of a nested dictionary [duplicate] 【发布时间】:2017-01-07 02:54:30 【问题描述】:

我有下面的代码,目前只打印初始字典的值。但是我想遍历嵌套字典的每个键以最初只打印名称。请参阅下面的代码:

Liverpool = 
    'Keepers':'Loris Karius':1,'Simon Mignolet':2,'Alex Manninger':3,
    'Defenders':'Nathaniel Clyne':3,'Dejan Lovren':4,'Joel Matip':5,'Alberto Moreno':6,'Ragnar Klavan':7,'Joe Gomez':8,'Mamadou Sakho':9


for k,v in Liverpool.items():
    if k =='Defenders':
       print(v)

【问题讨论】:

您是否只想打印最深的键、值对,即人名及其对应的数字,还是这个键、值对,例如:'Keepers', 'Loris Karius':1,'Simon Mignolet':2,'Alex Manninger':3 嵌套树能比你的例子更深吗? 您可以使用理解列表:names = [name for player in Liverpool.values() for name in player.keys()] 【参考方案1】:

这是打印所有团队成员的代码:

for k, v in Liverpool.items():
    for k1, v1 in v.items():
        print(k1)

因此,您只需逐个迭代每个内部字典并打印值。

【讨论】:

这个答案不检查内部级别是否是字典本身,否则会导致错误。【参考方案2】:

在其他答案中,您被指出如何解决给定 dicts 的任务,最大深度级别等于 2。这是一个程序,它允许您循环遍历具有无限嵌套级别的字典的键值对(更通用的方法):

def recursive_items(dictionary):
    for key, value in dictionary.items():
        if type(value) is dict:
            yield from recursive_items(value)
        else:
            yield (key, value)

a = 'a': 1: 1: 2, 3: 4, 2: 5: 6

for key, value in recursive_items(a):
    print(key, value)

打印

1 2
3 4
5 6

如果您只对最深层次的键值对感兴趣(当值不是 dict 时),这是相关的。如果您还对 value 为 dict 的键值对感兴趣,请稍作修改:

def recursive_items(dictionary):
    for key, value in dictionary.items():
        if type(value) is dict:
            yield (key, value)
            yield from recursive_items(value)
        else:
            yield (key, value)

a = 'a': 1: 1: 2, 3: 4, 2: 5: 6

for key, value in recursive_items(a):
    print(key, value)

打印

a 1: 1: 2, 3: 4, 2: 5: 6
1 1: 2, 3: 4
1 2
3 4
2 5: 6
5 6

【讨论】:

如果不使用yield from,你会如何写这个?因为我使用的是 Python 2.7。 这不处理字典在列表中的情况 就像@amirouche 提到的,如果你的字典中有列表,也添加这个if type(value) is list: yield from recursive_items(value[0]) 如果 type(value) 是 dict 并且 value!=:处理空字典【参考方案3】:
Liverpool = 
    'Keepers':'Loris Karius':1,'Simon Mignolet':2,'Alex Manninger':3,
    'Defenders':'Nathaniel Clyne':3,'Dejan Lovren':4,'Joel Matip':5,'Alberto Moreno':6,'Ragnar Klavan':7,'Joe Gomez':8,'Mamadou Sakho':9


for k,v in Liverpool.items():
    print(v.keys())

产量:

['Alberto Moreno', 'Joe Gomez', 'Dejan Lovren', 'Ragnar Klavan', 'Joel Matip', 'Nathaniel Clyne', 'Mamadou Sakho']
['Alex Manninger', 'Loris Karius', 'Simon Mignolet']

【讨论】:

以上是关于获取嵌套字典的所有键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

具有相同键的(嵌套)字典的 Pythonic 替代方案?

搜索特定值的嵌套字典列表[重复]

包含重复项的嵌套字典中的求和值

如何使用 SwiftyJSON 从深度嵌套的 JSON 字典中获取字符串 [重复]

如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数[重复]

dict update 更新嵌套键值对[重复]