我有一個函數可以根據某些鍵的值過濾字典列表,就像SELECT * WHERE xxxSQL 中的查詢一樣list_of_dict = [{'key1':val, 'key2':val},{'key1':val, 'key2':val},...]def filter_list(list_of_dict, key1, key2=None): if key2: filtered_list = [i for i in list_of_dict if i['key1']==key1 and i['key2']==key2] else: filtered_list = [i for i in list_of_dict if i['key1']==key1]但是當我有更多的鍵作為函數的參數時,if ...else...可能會很長。有沒有更Pythonic的方法來做到這一點?
1 回答

MM們
TA貢獻1886條經驗 獲得超2個贊
如果您有大量或可變數量的鍵,則可以使用all循環遍歷它們。下面是一個示例,其中鍵值作為關鍵字參數提供:
def filter_dicts(dicts, **keys):
return [
d for d in dicts
if all(d[k] == v for k, v in keys.items())
]
正如 @juanpa.arrivillaga 指出的,dict_items對象在許多方面的行為類似于集合,因此您可以選擇過濾具有keys子集的字典:
def filter_dicts(dicts, **keys):
return [d for d in dicts if keys.items() <= d.items()]
例子:
>>> dicts = [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}]
>>> filter_dicts(dicts, x=1)
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}]
>>> filter_dicts(dicts, x=1, y=2)
[{'x': 1, 'y': 2}]
>>> filter_dicts(dicts, y=3)
[{'x': 1, 'y': 3}]
添加回答
舉報
0/150
提交
取消