我有字典列表,如果它们包含某些键值对,我想从中提取特定的字典 词典列表的前例
[
{'value': 'def', 'key': 'abc'},
{'value': 'xyz', 'key': 'mnp'},
{'value': '456', 'key': '123'},
{'value': '234', 'key': '789'}
]
我想提取key=abc
或key=mnp
所在的格,这样我可以为key
添加多个条件
我在这里应该做什么?
我尝试修改this solution,但为此我必须做多个next
,每个都针对一个条件,例如key=abc
,key=mnp
我无法更改列表或格式,因为它是Web请求的响应
答案 0 :(得分:1)
#!/usr/bin/python3
d = [
{'value': 'def', 'key': 'abc'},
{'value': 'xyz', 'key': 'mnp'},
{'value': '456', 'key': '123'},
{'value': '234', 'key': '789'}
]
d = list(filter(lambda x: x['key'] in ['abc','mnp'], d))
print(d)
查看实际情况here
答案 1 :(得分:1)
使用问题中提供的生成器,将其分为两个步骤,将您的匹配项传递到列表中,然后使用geneartor对它们进行迭代
matches = ['abc','mbp']
for match in matches:
print(next((item for item in d if item["key"] == match), None))
out:
{'value': 'xyz', 'key': 'mnp'}
{'value': 'def', 'key': 'abc'}
答案 2 :(得分:0)
解压缩列表,您应该对此进行编辑。
all_keys = set().union(*(d.keys() for d in mylist))
答案 3 :(得分:0)
您可以这样做:
filtered_entries = [entry for entry in list_of_dicts if entry['key'] in ('abc', 'def', 'ghi', 'hello', 'world')]
或者这个:
filtered_entries = filter(lambda entry: entry['key'] in ('abc', 'def', 'ghi', 'hello', 'world'), list_of_dicts)
或更笼统地说:
def extract_kv_pairs(list_of_dicts, key_condition):
return [kv for kv in list_of_dicts if key_condition(entry['key'])]
filtered_entries = extract_kv_pairs(list_of_dicts, lambda k: k in ('abc', 'def', 'ghi', 'hello', 'world'))
# Or, if you don't like lambdas:
filtered_entries = extract_kv_pairs(list_of_dicts, ('abc', 'def', 'ghi', 'hello', 'world').__contains__)
# You can use more complicated conditions and put them in named functions:
def condition(key):
return (len(key)%2 == 0 and 'z' not in key)
filtered_entries = extract_kv_pairs(list_of_dicts, condition)
答案 4 :(得分:0)
您可以将该列表转换成字典,然后从中查询数据,例如:
def check_list():
list_of_dicts = [{'value': 'def', 'key': 'abc'},
{'value': 'xyz', 'key': 'mnp'},
{'value': '456', 'key': '123'},
{'value': '234', 'key': '789'}
]
new_dict = {d['key']: d['value'] for d in list_of_dicts}
abc = d['abc'] if 'abc' in new_dict.keys() else None
mnp = d['mnp'] if 'mnp' in new_dict.keys() else None
return abc, mnp
请注意,您可以实现其他查询逻辑,也可以仅使用for循环进行搜索。