python - 在 Python 中基于键/值过滤字典和创建子字典?

标签 python list dictionary filter

好吧,我卡住了,需要一些帮助...

如果我有这样的主词典:

data = [ {"key1": "value1", "key2": "value2", "key1": "value3"},  
{"key1": "value4", "key2": "value5", "key1": "value6"}, 
{"key1": "value1", "key2": "value8", "key1": "value9"} ]

现在,我需要通过字典来格式化一些数据,即:

for datadict in data:  
    for key, value in datadict.items():  
    ...filter the data...

现在,我将如何在同一个循环中以某种方式(如果可能......如果不能,请提出替代方案)检查某些键的值,如果这些值与我的预设匹配,那么我会将整个列表添加到另一个字典,从而在我根据某些键和值从这个主词典中进行时有效地创建较小的词典?

所以,假设我想创建一个包含所有列表的子字典,其中 key1 的值为“value1”,对于上面的列表,它会给我这样的东西:

subdata = [ {"key1": "value1", "key2": "value2", "key1": "value3"},  
{"key1": "value1", "key2": "value8", "key1": "value9"} ]

最佳答案

这是一种不太漂亮的方法。结果是一个生成器,但如果您真的想要一个列表,可以调用 list() 将其包围。大多数情况下,这无关紧要。

谓词是一个函数,它决定每个键/值对是否被列表中的字典删除。默认接受所有。如果字典中没有匹配的 k/v 对,则拒绝。

def filter_data(data, predicate=lambda k, v: True):
    for d in data:
         for k, v in d.items():
               if predicate(k, v):
                    yield d


test_data = [{"key1":"value1", "key2":"value2"}, {"key1":"blabla"}, {"key1":"value1", "eh":"uh"}]
list(filter_data(test_data, lambda k, v: k == "key1" and v == "value1"))
# [{'key2': 'value2', 'key1': 'value1'}, {'key1': 'value1', 'eh': 'uh'}]

关于python - 在 Python 中基于键/值过滤字典和创建子字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214968/

相关文章:

python - 从一个列表中提取重复项目的索引,并从该索引中合并另一个列表的项目

python - 更改 Bokeh slider 的值

list - 在SWI prolog中实现nth1列表操作

javascript - 为什么当应用Map.prototype.forEach时会返回undefined?

python - 类型错误 : 'int' object does not support item assignment?

android - 删除项目后如何更新列表?

python - 使用 bool 索引数组过滤列表

arrays - Swift:对字典数组中的键值对进行排序

python - 如何访问字典中所有键的值?

python - 如何根据另一个字典删除字典的键和值?