将文件转换为词典列表

2024-09-30 06:11:38 发布

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

我的文件格式如下:

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

我如何做这个/修复这个错误?你知道吗


Tags: namesourcelinevsssplitmngaten3
3条回答

你不能做那样的词典。您必须使用:

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)将每一项添加到字典中。然后可以创建一个名称列表,并通过计数器的索引访问该单词。你知道吗

这里有一个更容易管理的方法。当您的需求发生变化时,更新这段代码会容易得多,比如将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_dictdict理解的扩展形式,以供参考。你知道吗

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)

最省时的解决办法是使用熊猫。它会让你从分裂字符串、组成字典甚至循环的痛苦中解脱出来:

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

相关问题 更多 >

    热门问题