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)