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']
我有一个字典,其中包含一个键和一个字符串值列表。
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']