Python 使用字典理解,需要超过1个值才能解包
假设您的JSON结构如下所示:Python 使用字典理解,需要超过1个值才能解包,python,python-2.7,dictionary,list-comprehension,Python,Python 2.7,Dictionary,List Comprehension,假设您的JSON结构如下所示: { "valueA": "2", "valueB": [ { "key1": "value1" }, { "key2": "value2" }, { "key3": "value3" } ] } 当你做类似的事情时: dict_new = {key:value for (k
{
"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']是一个字典列表。您的代码需要另一层嵌套才能工作,因为您正在寻找一个键,所以需要在此处生成一个列表(键在字典中必须是唯一的): 如果您试图制作
key2:value
对的字典,则只剩下最后一对,因为先前的value
s已被替换,因为它们与同一个键关联
更好的是,只需抓住这一个键,如果您只需要这一个键,则无需在所有项目上循环:
values = [d['key2'] for d in dict['valueB'] if 'key2' in d]
这将在
dict['valueB']
列表中的词典列表上进行筛选;如果'key2'
是嵌套字典中的一个键,我们将其提取。您实际上是在尝试执行key,value={'key1':'value1'}
,这将不起作用。我希望能够从dict中获取(key,value),其中key='key2'可以作为一个新字典或元组,这将不起作用,你不能像那样解包字典键和值。
values = [d['key2'] for d in dict['valueB'] if 'key2' in d]