如何生成两个值为lis的字典键

2024-10-01 19:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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]} 列表中的值来自核弹.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())

Tags: infalsetrueforpngvaluergbattributes
3条回答

比如:

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]}
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:

如果您想实际计算方括号内的值(因此您得到的是1.0的浮点值而不是字符串'1.0',字符串'png'而不是字符串"'png'",等等),您需要知道它们所用的语言并对其进行解析。看起来它们是Python的一个子集,每个元素要么是没有转义符的单引号字符串文本,要么是非指数格式的浮点文本,要么是布尔文本,但我不会假设在不知道值来自何处的情况下(当然我也不会在不知道值来自何处的情况下调用eval,因为这样有人就可以在文本文件中插入os.system('rm -rf /'),然后你就可以对其进行评估。你知道吗

write1 = {'write1':[1,2,3,4] }

应该有用。。。你知道吗

相关问题 更多 >

    热门问题