根据字典中的键值对从字典列表中提取字典

时间:2019-12-26 18:12:16

标签: python list dictionary

我有字典列表,如果它们包含某些键值对,我想从中提取特定的字典 词典列表的前例

[
{'value': 'def', 'key': 'abc'},
{'value': 'xyz', 'key': 'mnp'},
{'value': '456', 'key': '123'},
{'value': '234', 'key': '789'}
]

我想提取key=abckey=mnp所在的格,这样我可以为key添加多个条件

我在这里应该做什么?

我尝试修改this solution,但为此我必须做多个next,每个都针对一个条件,例如key=abckey=mnp

我无法更改列表或格式,因为它是Web请求的响应

5 个答案:

答案 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循环进行搜索。