Python 如何遍历嵌套的dict?
我有一个嵌套的Python 如何遍历嵌套的dict?,python,dictionary,Python,Dictionary,我有一个嵌套的python字典数据结构。我想使用collection模块在不使用的情况下读取其键和值。数据结构如下所示 d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}} 我试着用下面的方法读字典里的键,但却出错了 代码 for key, value in d: print(Key) 错误 ValueError: too many values to unpack (expected 2) 因此,请
python字典
数据结构。我想使用collection
模块在不使用的情况下读取其键和值。数据结构如下所示
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}
我试着用下面的方法读字典里的键,但却出错了
代码
for key, value in d:
print(Key)
错误
ValueError: too many values to unpack (expected 2)
因此,请任何人解释错误背后的原因,以及如何在字典中进行迭代 要获取键和值,您需要dict.items()
:
如果您只需要钥匙:
for key in d:
print(key)
反复浏览字典只会给你答案
您告诉python需要一组元组,它试图解包一些不是元组的东西(您的代码被设置为希望每个迭代项的形式为(key,value)
,但事实并非如此(您只是在每次迭代中得到key
)
您还试图打印键
,这与键
不同,这会导致名称错误
for key in d:
print(key)
应该可以工作。keys()
方法返回一个视图对象,该对象显示字典中所有键的列表
迭代嵌套字典:
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}
for i in d.keys():
print i
for j in d[i].keys():
print j
def get_all_keys(d):
for key, value in d.items():
yield key
if isinstance(value, dict):
yield from get_all_keys(value)
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'dict3': {'baz': 3, 'quux': 4}}}
for x in get_all_keys(d):
print(x)
或
输出:
dict1
foo
bar
dict2
baz
quux
其中,i
迭代主字典键,j
迭代嵌套字典键。作为请求的输出,代码如下所示
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}
for k1,v1 in d.iteritems(): # the basic way
temp = ""
temp+=k1
for k2,v2 in v1.iteritems():
temp = temp+" "+str(k2)+" "+str(v2)
print temp
代替iteritems()
您也可以使用items()
,但是iteritems()
更有效,并返回迭代器
希望这有帮助:)您可以使用benedict
(一个dict
子类)和遍历实用方法:
安装:pip安装python benedict
from benedict import benedict
d = benedict({'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}})
def traverse_item(dct, key, value):
print('key: {} - value: {}'.format(key, value))
d.traverse(traverse_item)
文件:
注意:我是这个项目的作者。如果给定的字典模式的格式是单调的,并且键是已知的
dict_ = {'0': {'foo': 1, 'bar': 2}, '1': {'foo': 3, 'bar': 4}}
for key, val in dict_.items():
if isinstance(val, dict):
print(val.get('foo'))
print(val.get('bar'))
在这种情况下,我们可以跳过嵌套循环您可以如下迭代嵌套字典的所有键和值:
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}
for i in d:
for j, k in d[i].items():
print(j,"->", k)
您的输出如下所示-
foo -> 1
bar -> 2
baz -> 3
quux -> 4
以下内容适用于多层嵌套字典:
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}
for i in d.keys():
print i
for j in d[i].keys():
print j
def get_all_keys(d):
for key, value in d.items():
yield key
if isinstance(value, dict):
yield from get_all_keys(value)
d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'dict3': {'baz': 3, 'quux': 4}}}
for x in get_all_keys(d):
print(x)
这将为您提供:
dict1
foo
bar
dict2
dict3
baz
quux
是否也要读取嵌套的键和值?只需编写d.items()
,默认情况下,迭代dict的名称将只返回键。希望能有所帮助对我想读取所有包含嵌套键的键和值values@Arijit发布了请求输出的答案,请看一看。此问题的一般答案在此处没有回答,但在其他地方得到了回答:对于python2,您可以选择dict.iteritems()
,而对于此用例,它更快。这不是问题的答案“如何遍历嵌套dict”。Python 3不存在iteritems
方法。