我有这个庞大的列表(mylist
),其中包含如下字符串:
>>> mylist[0]
'Akaka D HI -1 -1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1 1 -1 -1 1 1 1 1 1 1 0 0 1 -1 -1 1 -1 1 -1 1 1 -1'
现在,我想取0,1和-1并用它们创建一个列表,所以我可以在字符串的第一部分创建一个名称列表,列表的值为0,1和-1 ...所以过了一段时间我想出了这个怪物
dictionary = {}
for x in range(len(mylist)-1):
dictionary.update({mylist[x].split()[0],[]}),[mylist[0].split()[k] for k in range(3,len(mylist[0].split()))]})
但是当我在命令行中尝试这个时,我收到了这个错误:
>>> for x in range(len(mylist)-1):
... dictionary.update({mylist[x].split()[0],[mylist[0].split()[k] for k in range(3,len(mylist[0].split()))]})
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: unhashable type: 'list'
答案 0 :(得分:1)
一种方法:
dictionary = {}
for x in mylist:
p = x.find('1')
if p > 0 and x[p-1] == '-': p -= 1
dictionary[x[0:p].strip()] = x[p:].split()
答案 1 :(得分:1)
您可以使用正则表达式:
import re
st='Akaka D HI -1 -1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1 1 -1 -1 1 1 1 1 1 1 0 0 1 -1 -1 1 -1 1 -1 1 1 -1'
dic={}
m=re.match(r'([a-zA-Z\s]+)\s(.*)',st)
if m:
dic[m.group(1)]=m.group(2).split()
结果:
{'Akaka D HI': ['-1', '-1', '1', '1', '1', '-1', '-1', '1', '1', '1', '1', '1', '1', '1', '-1', '1', '1', '1', '-1', '1', '1', '1', '1', '1', '-1', '1', '-1', '-1', '1', '1', '1', '1', '1', '1', '0', '0', '1', '-1', '-1', '1', '-1', '1', '-1', '1', '1', '-1']}
答案 2 :(得分:0)
您可以使用regular expressions。
import re
mydict = {}
for x in mylist:
myname = re.search(r'^(.*?)(?= [-10])', x).group()
myentry = re.findall(r'-*\d', x)
mydict['myname'] = myentry
第一个模式从头开始,匹配任何字符串,直到空格后跟-
,1
或0
来捕获名称。第二个模式匹配任何数字,前面是-
的任何数字(包括零),findall返回所有模式匹配的列表。