我有一个嵌套的python dictionary
数据结构。我想使用without
模块读取其键和值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)
所以任何人都可以解释错误背后的原因以及如何遍历字典。
答案 0 :(得分:8)
作为请求的输出,代码就像这样
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()
效率更高,并返回迭代器。
希望这会有所帮助:)
答案 1 :(得分:5)
获取所需的密钥和值dict.items()
:
for key, value in d.items():
print(key)
如果您只想要按键:
for key in d:
print(key)
答案 2 :(得分:5)
迭代嵌套字典:
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
输出:
dict1 foo bar dict2 baz quux
其中i迭代主字典键,j迭代嵌套字典键。
答案 3 :(得分:3)
通过字典迭代只能为你提供密钥。
你告诉python期待一堆元组,它试图解包一些不是元组的东西(你的代码设置为期望每个迭代的项目都是(key,value)
形式,这不是这种情况(你只是在每次迭代时获得key
)。
您还尝试打印Key
,这与key
不同,这会导致NameError
。
for key in d:
print(key)
应该有用。
答案 4 :(得分:3)
以下内容适用于多级嵌套字典:
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
答案 5 :(得分:2)
您可以按以下方式迭代嵌套字典的所有键和值:
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
答案 6 :(得分:1)
您可以使用[2019-10-29 15:52:15]CURLFile Object
(
[name] => uploads/airport.jpg.zip
[mime] => zip
[postname] => airport.jpg.zip
)
(一个benedict
子类)和遍历实用工具方法:
安装:dict
pip install python-benedict
答案 7 :(得分:1)
如果给定的字典模式具有单调格式并且已知键,则
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'))
在这种情况下,我们可以跳过嵌套循环