我正在尝试匹配并对列表中的类似字符串进行分组,但我不确定如何处理此问题。
我有以下列表:
tablenames =[
'SCS_q104',
'SCS_q102[{SCS_q102$_$_$SCS_q102_1}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_2}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_3}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_4}].SCS_q102_grid',
'SCS_q105',
'SCS_q106',
'SCS_q107[{SCS_q107$_$_$SCS_q107_1}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_2}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_3}].SCS_q107_grid',
'SCS_q108',
'SCS_q109',
]
预期结果:
groupofgrids = [[
'SCS_q102[{SCS_q102$_$_$SCS_q102_1}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_2}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_3}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_4}].SCS_q102_grid',
][
'SCS_q107[{SCS_q107$_$_$SCS_q107_1}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_2}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_3}].SCS_q107_grid',
]]
从上面的预期结果中,您可以看到我想如何对字符串进行分组。 如果括号前后的所有内容都与之前的字符串相同,则它们属于单个组。
此示例中有两组。
预期结果必须简单地对匹配的字符串组进行分组,如果将其存储为列表或某种字典,则无关紧要。
到目前为止我的尝试:
groupofgrids = []
for item in tablenames:
if "." in item:
suffix = item.split(".")[-1]
if suffix in item:
groupofgrids.append(item)
print groupofgrids
这个方法实际上并没有像我想要的那样对类似字符串进行分组,因为我不确定如何。
有什么建议吗?
答案 0 :(得分:0)
由于相似性是基于括号[...]
之间的内容之外的字符串,提取这些子字符串,使用分隔符(这里我使用"-"
)加入它们并使用它作为词典的关键词
试试这个 -
import re
regex = re.compile(r'(.*?)\[.*?\]\.(.*)')
groupofgrids = {}
for item in tablenames:
matches = regex.findall(item)
if (len(matches) > 0 and len(matches[0]) == 2):
key = "-".join(matches[0])
if key in groupofgrids:
groupofgrids[key].append(item)
else:
groupofgrids[key] = [item]
import json
print json.dumps(groupofgrids,sort_keys=True, indent=4)
#OUTPUT
'''
{
"SCS_q102-SCS_q102_grid": [
"SCS_q102[{SCS_q102$_$_$SCS_q102_1}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_2}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_3}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_4}].SCS_q102_grid"
],
"SCS_q107-SCS_q107_grid": [
"SCS_q107[{SCS_q107$_$_$SCS_q107_1}].SCS_q107_grid",
"SCS_q107[{SCS_q107$_$_$SCS_q107_2}].SCS_q107_grid",
"SCS_q107[{SCS_q107$_$_$SCS_q107_3}].SCS_q107_grid"
]
}
'''
如果您想要嵌套列表,请执行此操作 -
li = groupofgrids.values()
print json.dumps(li,sort_keys=True, indent=4)
#OUPTUT
'''
[
[
"SCS_q107[{SCS_q107$_$_$SCS_q107_1}].SCS_q107_grid",
"SCS_q107[{SCS_q107$_$_$SCS_q107_2}].SCS_q107_grid",
"SCS_q107[{SCS_q107$_$_$SCS_q107_3}].SCS_q107_grid"
],
[
"SCS_q102[{SCS_q102$_$_$SCS_q102_1}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_2}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_3}].SCS_q102_grid",
"SCS_q102[{SCS_q102$_$_$SCS_q102_4}].SCS_q102_grid"
]
]
'''
答案 1 :(得分:0)
这适合你:
group = dict()
for elm in tablenames:
try:
f,s = elm.split('.')
except:
pass
else:
group.setdefault(s,[])
group[s].append(elm)
import pprint
pprint.pprint(group.values())
输出:
[['SCS_q107[{SCS_q107$_$_$SCS_q107_1}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_2}].SCS_q107_grid',
'SCS_q107[{SCS_q107$_$_$SCS_q107_3}].SCS_q107_grid'],
['SCS_q102[{SCS_q102$_$_$SCS_q102_1}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_2}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_3}].SCS_q102_grid',
'SCS_q102[{SCS_q102$_$_$SCS_q102_4}].SCS_q102_grid']]