Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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中基于关键字列表的Dict筛选列表_Python_Python 3.x - Fatal编程技术网

python中基于关键字列表的Dict筛选列表

python中基于关键字列表的Dict筛选列表,python,python-3.x,Python,Python 3.x,我正在尝试根据另一个键列表筛选dict列表。请参见下面的示例 # Input list of dict lst_dict=[{'TABLE_NAME':'TEST1','COLUMN_NAME':'TEST_COLUMN','COLUMN_DATA_TYPE': 'varchar'}, {'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN2', 'COLUMN_DATA_TYPE': 'varchar'}, {'

我正在尝试根据另一个键列表筛选dict列表。请参见下面的示例

# Input list of dict
lst_dict=[{'TABLE_NAME':'TEST1','COLUMN_NAME':'TEST_COLUMN','COLUMN_DATA_TYPE': 'varchar'},
        {'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN2', 'COLUMN_DATA_TYPE': 'varchar'}, 
        {'COLUMN_DATA_TYPE': 'varchar','TABLE_NAME': 'TEST2','COLUMN_NAME': 'TEST_COLUMN1'}]
# Key List
key_lst = ['TABLE_NAME','COLUMN_NAME']
我的预期产出:

[{'TABLE_NAME': 'TEST2', 'COLUMN_NAME': 'TEST_COLUMN1'}, {'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN'}, {'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN2'}]
我写了下面的代码,但它只返回列表中的1个dict而不是3个dict。(根据我的例子)


我不确定我错在哪里。。任何建议都将不胜感激

按照您编写的
新列表
的方式,您似乎希望它是一个列表理解,但它只是一个包含单个项目的列表,这是一个dict理解。您可能希望将迭代器从字典中移出并移到列表中。应该是这样的:

new_list = [{k:v for k,v in i.items() if k in key_lst} for i in lst_dict]

按照您编写新列表的方式,您似乎希望它是一个列表理解,但它只是一个包含单个项目的列表,这是一个dict理解。您可能希望将迭代器从字典中移出并移到列表中。应该是这样的:

new_list = [{k:v for k,v in i.items() if k in key_lst} for i in lst_dict]
您可以将列表理解与dict理解结合使用,如下所示:

其中
lst_dict
key_lst
包含问题中提到的值

您尝试的问题是,您没有为列表中的子目录创建单独的
dict

您可以将列表理解与口述理解结合使用,如下所示:

其中
lst_dict
key_lst
包含问题中提到的值


您尝试的问题是,您没有为列表中的子目录创建单独的
dict

比我早几秒到达那里+比我早几秒+1.
>>> my_list = [{key: sub_dict.get(key) for key in key_lst} for sub_dict in lst_dict]
# using "dict.get('key')" in case key is not present in sub dicts in example 
>>> my_list
[{'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN'}, {'TABLE_NAME': 'TEST1', 'COLUMN_NAME': 'TEST_COLUMN2'}, {'TABLE_NAME': 'TEST2', 'COLUMN_NAME': 'TEST_COLUMN1'}]