[英]Python order list based on keys of nested list with dict, nested in a list with 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_dict
和key_lst
保存問題中提到的值。
嘗試的問題是您沒有為列表中的子字典創建單獨的dict
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.