Python:使用字符串列表过滤字典键

Python: Filter a dictionary key using list of strings

我有一个字典,其中包含一个键和一个字符串值列表。

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}

我想用 ['a', '4'] 这样的过滤器列表来过滤 d['docs'],这样我得到:

['1_a', '2_a', '4_c', '4_d']

过滤器列表可以包含多个关键字,而不仅仅是两个。我查看了列表理解但失败了。

只需搜索 any 个搜索词是否出现在您的值中:

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
search = ['a', '4']
out = [val for val in d['docs'] if any(s in val for s in search)]

print(out)
# ['1_a', '2_a', '4_c', '4_d']

给你:

>>> d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
>>> search = ['a', '4']
>>> [x for x in d['docs'] if any(s in x for s in search)]
['1_a', '2_a', '4_c', '4_d']

我想出了一个解决方案,不确定它是否是您要找的。

d = {'docs':['1_a', '2_a', '3_b', '4_c', '4_d']}
filter = ['a', '4']
result = []

for i in (d['docs']):
    
    for f in filter:
        if f in i:
            result.append(i)

print(result)

您还可以使用 filter() 来过滤列表中的元素:

list(filter(lambda x: any(i in x for i in ['a', '4']), d['docs']))
['1_a', '2_a', '4_c', '4_d']

看起来 OP 得到了他们想要的东西,但这主要是打字的,所以我也可以 post 它。如果这个想法是与 slugs 一起工作,那么接受的答案可能会导致奇怪的结果。

例如:

>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val for s in search)]
['2_at', '2_hat', '34_b', '4_c', '32_bat']

相反,您可以拆分每个项目:

>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val.split('_') for s in search)]
['2_at', '4_c']