获取嵌套字典的所有键[重复]
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']
【讨论】:
以上是关于获取嵌套字典的所有键[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftyJSON 从深度嵌套的 JSON 字典中获取字符串 [重复]