-6
Write1 [1.0]
Write1 [12.0]
Write1 ['C:/Users/san/Modeler/']
Write1 ['png']
Write1 ['rgb']
Write1 [True]
Write2 [1.0]
Write2 [1.0]
Write2 ['']
Write2 [' ']
Write2 ['rgb']
Write2 [False]

このような辞書を作りたい {'Write1':[1.0,12.0,'c:/path','png','rgb',True],'Write2':[1.0,1.0,'',' ', 'rgb',False]} リスト内の値は nuke.toNode(wNode)[eachAttrib].value() から取得されます これは私がやろうとしたことです

attributes=[]
wnodeData={}
for wNode in writeNodes:
    for eachAttrib in ['first','last','file','file_type','channels','use_limit']:
        wnodeData[wNode]=attributes
        attributes.append(nuke.toNode(wNode)[eachAttrib].value())
4

4 に答える 4

2

何かのようなもの:

text="""Write1 [1.0]
Write1 [12.0]
Write1 ['C:/Users/san/Modeler/']
Write1 ['png']
Write1 ['rgb']
Write1 [True]
Write2 [1.0]
Write2 [1.0]
Write2 ['']
Write2 [' ']
Write2 ['rgb']
Write2 [False]"""

from ast import literal_eval

d = {}
lines = text.splitlines()
for line in lines:
    k, v = line.split(' ', 1)
    val = literal_eval(v)[0]
    d.setdefault(k, []).append(val)

print d

# {'Write1': [1.0, 12.0, 'C:/Users/san/Modeler/', 'png', 'rgb', True], 'Write2': [1.0, 1.0, '', ' ', 'rgb', False]}
于 2012-12-12T18:08:54.187 に答える
1
import collections

s = '''Write1 [1.0]
Write1 [12.0]
Write1 ['C:/Users/san/Modeler/']
Write1 ['png']
Write1 ['rgb']
Write1 [True]
Write2 [1.0]
Write2 [1.0]
Write2 ['']
Write2 [' ']
Write2 ['rgb']
Write2 [False]'''

d = collections.defaultdict(list)
for line in s.split('\n'):
    print(line)
    key, val = line.split(' ', 1)
    d[key].append(val[1:-1])
print(d)

明らかに、文字列の代わりにテキスト ファイルがある場合は、for ループを次のように置き換えます。

with open('mystuff.txt', 'r') as f:
    for line in f:

括弧内の値を実際に評価したい場合 (つまり、 string の代わりに float を取得したり、 string の1.0代わりに string'1.0''png'取得したり"'png'"する場合)、それらが書かれている言語を知り、それを解析する必要があります。それらはPythonのサブセットのように見えます。それぞれがエスケープのない単一引用符で囲まれた文字列リテラル、非指数形式のフロートリテラル、またはブールリテラルのいずれかですが、知らないうちにそれを想定することはできません値がどこから来ているか (そしてeval、どこから来ているかを知らずにそれらを呼び出すことは絶対にos.system('rm -rf /')ありません。

于 2012-12-12T18:08:08.117 に答える
0
write1 = {'write1':[1,2,3,4] }

動作するはずです...

于 2012-12-12T18:03:06.367 に答える
0

デフォルト値をリストとして defaultdict を作成し、追加を開始します(または他のリストメソッドを使用します)。

于 2012-12-12T18:03:31.057 に答える