[英]Extract lists by specific keywords from a list of lists
我只需要从列表中提取包含特殊关键字的列表:
my_list= [['sussidi', '14,5'],
['sussidi', '42,5', 'miliardi'],
['esclusioni.', "l'anno", 'scorso,', '41'],
['esclusioni.', "l'anno", 'scorso,', '22', 'milioni'],
['scorso,', '41', 'milioni', 'visitatori'],
['40', 'milioni', 'visitatori'],
['paese', 'aspettava', '40'],
['aspettava', '40', 'milioni']]
我只想提取那些包含以下关键字的列表:
keywords = ['visitatori','sussidi']
我做了:
for item in my_list:
print([x for x in item if any(kw in x for kw in keywords)])
但它只给了我关键字:
['sussidi']
['sussidi']
[]
[]
['visitatori']
['visitatori']
[]
[]
我预期的 output 将是
['sussidi', '14,5']
['sussidi', '42,5', 'miliardi']
[]
[]
['scorso,', '41', 'milioni', 'visitatori']
['40', 'milioni', 'visitatori']
[]
[]
任何帮助表示赞赏。
您有太多级别的循环( x for x in item...
)。 做就是了:
for item in my_list:
print(item if any(kw in item for kw in keywords) else [])
你可以做
l=[y if x else [] for x , y in zip( pd.DataFrame(my_list).isin(keywords).any(1),my_list)]
[['sussidi', '14,5'], ['sussidi', '42,5', 'miliardi'], [], [], ['scorso,', '41', 'milioni', 'visitatori'], ['40', 'milioni', 'visitatori'], [], []]
这可以作为 1 行列表理解来完成:
print([item for item in my_list if any([kw in item for kw in keywords])])
如果任何关键字在该列表中,这将打印由my_list
中的项目(子列表)组成的列表。
my_list=[lists if len(set(lists) & set(keywords))>0 else [] for lists in my_list ]
在列表理解中使用 if-else 搜索关键字和内部列表之间的交集。 如果找到任何元素,则取内部列表,否则返回 []
您可以使用此列表理解:
ll = [l for s in kw for l in my_list if s in l]
该列表推导等效于这个嵌套的 for 循环:
for l in my_list:
for s in kw:
if s in l:
print(l)
Output:
['sussidi', '14,5']
['sussidi', '42,5', 'miliardi']
['scorso,', '41', 'milioni', 'visitatori']
['40', 'milioni', 'visitatori']
其实很简单:
# Create a set of the keywords to check if a given
# word in one of the inners list is a keyword
keywords_set = set(keywords)
# create list in which you are going to store the
# inner lists that satisfy your condition
final_result = []
for inner_list in my_list:
for word in inner_list:
if word in keywords_set:
final_result.append(inner_list)
print(final_result)
控制台 Output:
[
['sussidi', '14,5'],
['sussidi', '42,5', 'miliardi'],
['scorso,', '41', 'milioni', 'visitatori'],
['40', 'milioni', 'visitatori']
]
使用过滤器 function 和 lambda 函数,可以使用函数式编程而不是列表理解来编写两级 for 循环:
final_result = filter(lambda inner_list: any(map(lambda word: word in keywords_set, inner_list)), my_list)
不过,最有效的方法是使用集合结构的交集(& 符号)操作:
final_result = filter(lambda inner_list: len(keywords_set & set(inner_list)) > 0, my_list)
重要的部分是: len(keywords_set & set(inner_list)) > 0
我们正在检查这两个集合的交集是否为空集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.