Python 您如何从以下文件中形成dict
我有一个大文件,格式如下:Python 您如何从以下文件中形成dict,python,list,dictionary,Python,List,Dictionary,我有一个大文件,格式如下: -- 0058 name_1 0BA7 VOL 512.0 2018-04-07/12:00 0058 name_1 0BAF VOL 64.0 2018-04-07/12:00 0058 name_2 0C93 VOL 808.0 2018-04-07/12:00 0058 name_2 0CFF VOL 307.1 2018-04-07/12:00 0058 name_3 0F4F VOL 16.2 2018-04-07/12:00 0058 name_3 0F5
--
0058 name_1 0BA7 VOL 512.0 2018-04-07/12:00
0058 name_1 0BAF VOL 64.0 2018-04-07/12:00
0058 name_2 0C93 VOL 808.0 2018-04-07/12:00
0058 name_2 0CFF VOL 307.1 2018-04-07/12:00
0058 name_3 0F4F VOL 16.2 2018-04-07/12:00
0058 name_3 0F51 VOL 16.0 2018-04-07/12:00
0058 name_3 0F53 VOL 16.2 2018-04-07/12:00
--
使用第2列中的键形成dict的最佳优化方法是什么,以便我可以获得以下信息:
key: name_1 -> [ 0BA7,0BA7], [512.0,64.0]
key: name_2 -> [ 0C93,0CFF], [512.0,64.0]
key: name_3 -> [ 0F4F,0F51,0F53], [16.2,16.0,16.0]
甚至
key: name_1 -> [ key[0BA7]->512.0, key[0BA7]->64.0]
...
key: name_3 -> [ key[0F4F]->16.2, key[0F51]->16.0, key[0F53]->16.0]
下面是一个简单的方法,考虑了两种可能的输出格式:
with read(my_file.txt, 'r') as infile: # open the file
lines = [i.split() for i in infile.readlines()[1:-1]] # use list comprehension to put lines from the file in a more useful format
# each line now looks like
# [0058, name_1, 0BA7, VOL, 512.0, 2018-04-07/12:00]
# 0 1 2 3 4 5
my_dict = {}
for line in lines:
# version 1 of your intended output
if not line[1] in my_dict:
my_dict[line[1]] = ([line[2]], [line[4]]) # initialize as a new tuple
else:
my_dict[line[1]][0].append(line[2]) # already initialized, so we
my_dict[line[1]][1].append(line[4]) # add on to the end of what's there
# version 2 of your intended output
if not line[1] in my_dict:
my_dict[line[1]] = {line[2]: line[4]} # initialize as a new dict
else:
my_dict[line[1]][line[2]] = line[4] # add a key to existing dict
return my_dict
我不认为用dict理解就可以做到这一点,因为键之间是动态构建的。如果每一行都遵循您的示例,最简单的方法是按空格分割行。至于读取你的文件,我会选择readline方法,因为对于一个大文件,一次读取一行更好
d = {}
with open(filepath) as fp:
line = fp.readline()
if not line:
break
_, key, val1, _, val2, _ = line.split()
if key not in d:
d[key] = {}
d[key][val1] = val2
print(d)