Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字典理解,需要超过1个值才能解包_Python_Python 2.7_Dictionary_List Comprehension - Fatal编程技术网

Python 使用字典理解,需要超过1个值才能解包

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

假设您的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']是一个字典列表。您的代码需要另一层嵌套才能工作,因为您正在寻找一个键,所以需要在此处生成一个列表(键在字典中必须是唯一的):

如果您试图制作
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]