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

これを行う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()
于 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 に答える