我的文件格式如下:
MN_N3 net48 sout VSS VBN lvtnfet l=0.116u nf=1 M=1 nfin=4
MN_N10 net082 net48 VSS VBN lvtnfet l=0.116u nf=1 M=1 nfin=4
MN_N11 nclk_net CK VSS VBN lvtnfet l=0.068u nf=1 M=1 nfin=4
MN_N9 SO SE net082 VBN lvtnfet l=0.116u nf=1 M=1 nfin=4
我想将其作为字典列表阅读,以使每一行都像这样的字典
{'name': 'MN_N3' , 'source': 'net48' , 'gate': 'sout', 'Drain':'VSS'}
我已经尝试过了:
d{'name':line.split(' ')[0], 'source':line.split(' ')[1], 'gate':line.split(' ')[2], 'drain':line.split(' ')[3]}
哪个给了我
File "task2.py", line 24
d{'name':line.split(' ')[0], 'source':line.split(' ')[1], 'gate':line.split(' ')[2], 'drain':line.split(' ')[3]}
^
SyntaxError: invalid syntax
我该怎么做/解决此错误?
答案 0 :(得分:3)
这是一种更易于管理的方式。当您的需求发生变化时,例如将lvtnfet
也添加到字典中,可以更轻松地更新此代码。
# Or file.readlines()
ls = ['MN_N3 net48 sout VSS VBN lvtnfet l=0.116u nf=1 M=1 nfin=4',
'MN_N10 net082 net48 VSS VBN lvtnfet l=0.116u nf=1 M=1 nfin=4',
'MN_N11 nclk_net CK VSS VBN lvtnfet l=0.068u nf=1 M=1 nfin=4',
'MN_N9 SO SE net082 VBN lvtnfet l=0.116u nf=1 M=1 nfin=4']
word_list = [[word for word in item.split(' ')[:4]] for item in ls ] # Only first 4 elements from the list
final_dict = {index:{'name': ls[0], 'source':ls[1], 'gate':ls[2], 'Drain': ls[3]} for index, ls in enumerate(word_list)}
print(final_dict)
输出:
{0: {'Drain': 'VSS', 'gate': 'sout', 'name': 'MN_N3', 'source': 'net48'},
1: {'Drain': 'VSS', 'gate': 'net48', 'name': 'MN_N10', 'source': 'net082'},
2: {'Drain': 'VSS', 'gate': 'CK', 'name': 'MN_N11', 'source': 'nclk_net'},
3: {'Drain': 'net082', 'gate': 'SE', 'name': 'MN_N9', 'source': 'SO'}}
这是final_dict
dict理解的扩展形式,仅供参考。
final_dict = {}
for index, ls in enumerate(word_list):
final_dict.update({index:{'name': ls[0], 'source':ls[1], 'gate':ls[2], 'Drain': ls[3]}})
print(final_dict)
答案 1 :(得分:2)
最省时的解决方案是使用Pandas。它将使您免于分割字符串,形成字典甚至出现循环的苦难:
import pandas as pd
names = ['name' , 'source', 'gate', 'Drain']
pd.read_csv("your_file.dat", sep='\s+', header=None,
usecols=range(len(names)), names=names).to_dict(orient='records')
#[{'name': 'MN_N3', 'source': 'net48', 'gate': 'sout', 'Drain': 'VSS'},
# {'name': 'MN_N10', 'source': 'net082', 'gate': 'net48', 'Drain': 'VSS'},
# {'name': 'MN_N11', 'source': 'nclk_net', 'gate': 'CK', 'Drain': 'VSS'},
# {'name': 'MN_N9', 'source': 'SO', 'gate': 'SE', 'Drain': 'net082'}]
答案 2 :(得分:-1)
您不能像这样制作字典。您将必须使用:
d = {'name': line.split(' ')[0], ...}
但是,更好的方法是使用for循环。
for line in input.split('\n'): # \n is the new line character
for item in line.split(' '):
print(item)
这为您提供了每一项,您可以使用内部for循环中的计数器(或enumerate function)将每一项添加到字典中。然后,您可以创建名称列表并通过计数器的索引访问该单词。
答案 3 :(得分:-1)
f = open('tp.txt','r').readlines()
for line in f:
print({'name':line.split(' ')[0], 'source':line.split(' ')[1], 'gate':line.split(' ')[2], 'drain':line.split(' ')[3]})
这将打印字典。如果要保存,可以将打印更改为作业。