如何在Python中创建复杂的字典结构?

drb*_*sen 0 python dictionary nested

我正在尝试从中读取数据并创建嵌套的字典字典.还有一个类似的问题在这里,但我似乎无法弄清楚如何适应解决我的具体问题.如果有人能解释我的问题解决方案,我将非常感激.

基本上,我有一个看起来像这样的文件:

A    'abc'    12    0.001
B    'tex'    34    0.002  
B    'tex'    78    0.005
E    'yet'    88    0.090
A    'abc'    22    0.120
Run Code Online (Sandbox Code Playgroud)

我需要创建一个如下所示的复杂字典:

complete_dict = {A:{'abc':[[12, 0.001], [22, 0.120]]}, 
                 B:{'tex':[[34, 0.002], [78, 0.005]]}, 
                 E:{'yet':[[88, 0.090]]}}
Run Code Online (Sandbox Code Playgroud)

我可以创建内部字典,但我无法弄清楚如何创建外部字典.这是我的内部字典的代码:

with open('data.txt', mode="r") as data_file:
    fieldnames = ('character', 'string', 'value1', 'value2')
    reader = csv.DictReader(data_file, fieldnames=fieldnames, delimiter="\t")
    inner_dict = {}
    for row in reader:
        values = [int(row['value1']), float(row['value2'])] 
        string = row['string'] 
        if string in inner_dict:
            inner_dict[string].append(values)
        else:
            inner_dict[string] = values
Run Code Online (Sandbox Code Playgroud)

有人可以解释如何创建外部字典吗?我唯一的想法是读取文件并创建内部字典,然后重新读取文件以创建外部字典.当然必须有一个更简单的方法吗?在此先感谢您的帮助!

ret*_*ile 6

这是你想要完成的吗?

with open('data.txt', mode="r") as data_file:
    fieldnames = ('character', 'string', 'value1', 'value2')
    reader = csv.DictReader(data_file, fieldnames=fieldnames, delimiter="\t")

    complete_dict = {}
    for row in reader:
        char_dict = complete_dict.setdefault(row['character'], {})
        values_list = char_dict.setdefault(row['string'], [])
        values = [int(row['value1']), float(row['value2'])] 
        values_list.append(values)

pprint.pprint(complete_dict)
Run Code Online (Sandbox Code Playgroud)

请注意,在您的示例中,您有'value2',您想要'value1'.此外,这似乎包括字符串周围的单引号作为字符串的一部分,因此您可能需要清理它.