Python - 如果不在字典键中的字符串列表,则从字典列表中删除字典

时间:2017-02-21 11:03:57

标签: python string list

results = [
        {'id': 1, 'text': 'String 55 - 1' },
        {'id': 2, 'text': 'String 3 - 2' },
        {'id': 3,  'text': 'String 5 - 4 - 1'}]

str = [' 5 ', ' 4 ']

我想从results中删除不包含str text列表中每个字符串的每个字典。目前我可以用一个条件来做,例如:

results[:] = [d for d in results if lst[0] in d['text']]

但是,这也不会检查' 4 '是否也在文本中。

2 个答案:

答案 0 :(得分:3)

只需使用all来测试所有列表中的项目是否在字典值中,并使用列表推导的过滤器中的项目:< / p>

lst = [' 5 ', ' 4 ']
results[:] = [d for d in results if all(i in d['text'] for i in lst)]
print(results)
# [{'text': 'String 5 - 4 - 1', 'id': 3}]

答案 1 :(得分:2)

您可以在理解条件下使用all

results = [
        {'id': 1, 'text': 'String 55 - 1' },
        {'id': 2, 'text': 'String 3 - 2' },
        {'id': 3,  'text': 'String 5 - 4 - 1'}]

strs = [' 5 ', ' 4 ']  # you shouldn't name it "str" because that's a builtin function

>>> [dct for dct in results if all(substr in dct['text'] for substr in strs)]
[{'id': 3, 'text': 'String 5 - 4 - 1'}]

您也可以使用set.issubsetstr.split代替:

strs = {'5', '4'}  # this is a set!

[dct for dct in results if strs.issubset(dct['text'].split())]

这将检查您在{whomepaces分割的['text']是否包含strs中的所有字符。根据{{​​1}}的长度和text中的项目数量,这可能比strs - 方法更快。