1

我有一个巨大的列表 ( 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'
4

3 回答 3

2

一种方法:

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()
于 2013-07-11T00:01:17.717 回答
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']}
于 2013-07-11T00:12:43.923 回答
0

你可以用正则表达式来做到这一点。

import re

mydict = {}
for x in mylist:
    myname = re.search(r'^(.*?)(?= [-10])', x).group()
    myentry = re.findall(r'-*\d', x)
    mydict['myname'] = myentry

第一个模式从开头开始并匹配任何字符串,直到一个空格后跟一个-,10, 以捕获名称。第二个模式匹配任何数字,前面是 的任何数字(包括零)-,findall 返回所有模式匹配的列表。

于 2013-07-11T00:53:49.653 回答