从列表中筛选出一些项目,并在不同的蟒蛇存储阵列 [英] filter out some items from a list and store in different arrays in python

查看:153
本文介绍了从列表中筛选出一些项目,并在不同的蟒蛇存储阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一些字符串项的列表

i have a list which contains some string items

res = ["FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'KIDS' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'FANTASY' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME =='Mumbai' & EVENT_GENRE == 'FESTIVAL' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'New Delhi' & EVENT_GENRE == 'WORKSHOP' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'EXHIBITION' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == '|DRAMA|'",
"FAV_VENUE_CITY_NAME = 'Mumbai' &  & FAV_GENRE == '|ACTION|ADVENTURE|SCI-FI|'",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == '|COMEDY|'",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == 'DRAMA' & FAV_LANGUAGE == 'English'",
"FAV_VENUE_CITY_NAME == 'New Delhi' & FAV_LANGUAGE == 'Hindi' & count_EVENT_LANGUAGE >= 1"]

我想遍历所有列表项和存储在不同的lists.Out放不同的值应该像

i want to iterate over all list items and store different value in different lists.Out put should like

FAV_VENUE_CITY_NAME = ['Mumbai','Bangalore','New Delhi']
EVENT_GENRE = ['KIDS','FANTASY','FESTIVAL','WORKSHOP','EXHIBITION']
FAV_GENRE = ['|DRAMA|','|ACTION|ADVENTURE|SCI-FI|','|COMEDY|','DRAMA']
FAV_LANGUAGE = ['English','Hindi']
count_on_field = ['EVENT_GENRE','EVENT_LANGUAGE']

直到但我想出了要为

Till yet what i came up to is

fields = [re.split(r'[(==)(>=)]', x)[0].strip() for x in re.split('[&($#$)]', res)]
fields = [x for x in list(set(fields)) if x]
o/p:fields = ['FAV_VENUE_CITY_NAME','EVENT_GENRE','FAV_GENRE','FAV_LANGUAGE','count_EVENT_GENRE','count_EVENT_LANGUAGE']

但没能获得所预期的。

But not able to get the expected one.

所以,请建议什么我缺少和需要do.An例子将是一个很大的帮助。

So please suggest what i am missing and need to do.An example will be a great help.

推荐答案

您可以试试下面的正则表达式,我使用正则表达式列表和搜索方法进行匹配和 AST 格式化字符串(获取印地文'印地文')afteral我用 uniquer 函数来获取列表的独特元素。

You can try regex as below, i used regex-list and search method for matching and ast module for formatting strings (for getting 'Hindi' from "'Hindi'") afteral i used uniquer function to get unique elements of list.

import re,ast

res = ["FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'KIDS' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'FANTASY' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME =='Mumbai' & EVENT_GENRE == 'FESTIVAL' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'New Delhi' & EVENT_GENRE == 'WORKSHOP' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Mumbai' & EVENT_GENRE == 'EXHIBITION' & count_EVENT_GENRE >= 1",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == '|DRAMA|'",
"FAV_VENUE_CITY_NAME = 'Mumbai' &  & FAV_GENRE == '|ACTION|ADVENTURE|SCI-FI|'",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == '|COMEDY|'",
"FAV_VENUE_CITY_NAME == 'Bangalore' & FAV_GENRE == 'DRAMA' & FAV_LANGUAGE == 'English'",
"FAV_VENUE_CITY_NAME == 'New Delhi' & FAV_LANGUAGE == 'Hindi' & count_EVENT_LANGUAGE >= 1"]

FAV_VENUE_CITY_NAME = []
EVENT_GENRE = []
FAV_GENRE = []
FAV_LANGUAGE = []
count_on_field = []

pat =[ """FAV_VENUE_CITY_NAME[\s==]+(.*?)&""","""EVENT_GENRE[\s==]+(.*?)&""","""FAV_GENRE[\s==]+(.*?)(?:\s|&|$)""","""FAV_LANGUAGE[\s==]+(.*?)(?:\s|&|$)""","""count_(\w+)"""]

def matcher(st,indx,lst):
    if re.compile(pat[indx]).search(st):
        lst.append(re.compile(pat[indx]).search(s).groups()[0].strip())
def uniquer(l):
    try:
        return map(ast.literal_eval,list(set(l)))
    except:
        return list(set(l))

for s in res:
    matcher(s,0,FAV_VENUE_CITY_NAME)
    matcher(s,1,EVENT_GENRE)
    matcher(s,2,FAV_GENRE)
    matcher(s,3,FAV_LANGUAGE)
    matcher(s,4,count_on_field)

print uniquer(FAV_GENRE),uniquer(FAV_LANGUAGE),uniquer(FAV_VENUE_CITY_NAME),uniquer(EVENT_GENRE),uniquer(count_on_field)

输出 -

['|DRAMA|', '|COMEDY|', '|ACTION|ADVENTURE|SCI-FI|', 'DRAMA'] ['Hindi', 'English'] ['New Delhi', 'Mumbai', 'Bangalore'] ['FESTIVAL', 'WORKSHOP', 'FANTASY', 'KIDS', 'EXHIBITION'] ['EVENT_GENRE', 'EVENT_LANGUAGE']

看到现场正则表达式<大骨节病> 演示

这篇关于从列表中筛选出一些项目,并在不同的蟒蛇存储阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆