簡體   English   中英

根據python中的鍵列表過濾Dict的列表

[英]Filtering List of Dict based of a list of keys in python

我試圖根據另一個鍵列表來過濾字典列表。 請參閱以下示例。

# 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個字典,而不是3個。(按照我的示例)

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

我不確定我哪里錯了。任何建議都將受到贊賞!

您編寫new_list的方式看起來像您希望它是一個列表理解,但是它只是一個包含單個項目的列表,這是一個dict理解。 您可能希望將lst_dict的迭代器移出字典並移至列表中。 它看起來應該像這樣:

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

您可以將列表理解字典理解一起使用為:

>>> 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'}]

其中lst_dictkey_lst保存問題中提到的值。

嘗試的問題是您沒有為列表中的子字典創建單獨的dict

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM