使用字典理解,需要多于 1 个值才能解包
Using dictionary comprehenion, need more than 1 value to unpack
考虑一下您的 JSON 结构如下:
{
"valueA": "2",
"valueB": [
{
"key1": "value1"
},
{
"key2": "value2"
},
{
"key3": "value3"
}
]
}
当做类似的事情时:
dict_new = {key:value for (key,value) in dict['valueB'] if key == 'key2'}
我得到:
ValueError: need more than 1 value to unpack
为什么以及如何解决?
dict['valueB']
是一个 词典列表 。您需要另一层嵌套才能使您的代码正常工作,并且由于您正在寻找 one 键,因此您需要在此处生成一个列表(键在字典中必须是唯一的):
values = [value for d in dict['valueB'] for key, value in d.items() if key == 'key2']
如果您试图制作一个包含 key2: value
对的字典,您将只剩下最后一对,因为之前的 value
已被替换为与相同的关联关键。
更好的是,只需抓住那个钥匙,如果您只想要那个钥匙,则无需遍历 所有 个项目:
values = [d['key2'] for d in dict['valueB'] if 'key2' in d]
这会过滤 dict['valueB']
列表中的词典列表;如果 'key2'
是该嵌套字典中的键,我们将其提取。
考虑一下您的 JSON 结构如下:
{
"valueA": "2",
"valueB": [
{
"key1": "value1"
},
{
"key2": "value2"
},
{
"key3": "value3"
}
]
}
当做类似的事情时:
dict_new = {key:value for (key,value) in dict['valueB'] if key == 'key2'}
我得到:
ValueError: need more than 1 value to unpack
为什么以及如何解决?
dict['valueB']
是一个 词典列表 。您需要另一层嵌套才能使您的代码正常工作,并且由于您正在寻找 one 键,因此您需要在此处生成一个列表(键在字典中必须是唯一的):
values = [value for d in dict['valueB'] for key, value in d.items() if key == 'key2']
如果您试图制作一个包含 key2: value
对的字典,您将只剩下最后一对,因为之前的 value
已被替换为与相同的关联关键。
更好的是,只需抓住那个钥匙,如果您只想要那个钥匙,则无需遍历 所有 个项目:
values = [d['key2'] for d in dict['valueB'] if 'key2' in d]
这会过滤 dict['valueB']
列表中的词典列表;如果 'key2'
是该嵌套字典中的键,我们将其提取。