猿问

请问python里字符串如何变成字典?

a='''The/ATgrand/JJjury/NNcommented/VBon/Ina/ATnumber/NNof/Inother/APtopics/NNS,/,AMONG/Inthem/PPOthe/ATAtlanta/NPand/CC'''
{'AT':['the','a'],'JJ':['grand'],'NN':['jury','number'],'VB':['commented'],'In':['on','of','among'],'AP':['other'],'NNS':['topics'],',':[','],'PPO':['them'],'NP':['atlanta'],'CC':['and']}将上面的字符串变成下面的字典,但是限定只能用str,list,dictionary相关的结构来解答
题目来源及自己的思路
我是将这个字符串的空白去掉形成了列表,然后将列表变成字符串再把反斜杠去掉,但是去掉后,变成了一个个单一的字符串形成的列表,不知道该怎么形成集合的字典。
相关代码
//请把代码文本粘贴到下方(请勿用图片代替代码)importrea='''The/ATgrand/JJjury/NNcommented/VBon/Ina/ATnumber/NNof/Inother/APtopics/NNS,/,AMONG/Inthem/PPOthe/ATAtlanta/NPand/CC'''b=re.findall('w+/w+',a)c=str(b).split('/')print(c)
你期待的结果是什么?实际看到的错误信息又是什么?
我目前的思路也有可能是错的,希望可以指导一下,谢谢!
尚方宝剑之说
浏览 756回答 2
2回答

开心每一天1111

b=re.findall(r'(.+?)/(.+?)',a)#注意最后有个空格keys=[]for_binb:if_b[1]notinkeys:keys.append(_b[1])res={}forkeyinkeys:res[key]=[_b[0]for_binbif_b[1]==key]

慕沐林林

无聊看了下,lambdawn的回答搞笑了,正则没写对丢数据,小写没转换,结果没去重,还能一本正经忽悠...其实就是个map/reduce的问题,先拆分成map,然后按照键值聚合起来:可以比对下,这种方式可以写出简洁且效率较高的代码,如下:deffunc1():#按空白换行符后分割,每个单元按照/切分后为value->key映射b=map(lambdax:x.split('/'),a.split())#按键值keyreduce,用set结构去重c={}forvinb:ifv[1]notinc.keys():c[v[1]]=set()c[v[1]].add(v[0].lower())#set转listd={k:list(v)fork,vinc.items()}returnd如果非得按照lambdawn这样思路,代码大概如下:deffunc2():b=re.findall(r'(.+?)/(.+?)\s+',a+'')keys=[]for_binb:if_b[1]notinkeys:keys.append(_b[1])res={}forkeyinkeys:for_binb:if_b[1]==key:c=res.get(key,[])if_b[1]==keyand_b[0].lower()notinc:ifnotc:res[key]=[]res[key].append(_b[0].lower())returnres做下简单性能测试对比,defperf_test():start=time.clock()foriinxrange(0,10000):func1()end=time.clock()printend-startforiinxrange(0,10000):func2()end=time.clock()printend-start结果,大概差一倍左右0.3401306938360.780941427825
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答