拆分输出以填充嵌套字典python

时间:2017-04-05 14:41:34

标签: python dictionary text-files

我正在尝试填充嵌套字典,但由于我是python(也是Stack Overflow)的新手,因此遇到了麻烦。

我有一个带有照片路径的txt文件,我想将它的分割填充到嵌套字典中。文本文件的示例如下所示:

/photos/Bob_January_W1_001.png
/photos/Alice_April_W2_003.png

Bob是用户,1月是月份,W1是星期,001是照片的nr。等

我想在以下结构中填充嵌套字典(基于我读过的内容):

{'Bob': {'January': {'W1': 001, 002, 003}, {'W2': 001, 002,003}}, 'February': {'W3': 001, 002}}  #And so on for other keys as well

到目前为止,我只设法将数字排序给用户,如下所示:

sorteddict = {}
with open('validation_labels.txt','r') as f:
    for line in f:
        split = line.split('_')
        user = split[1]
        month = split[2]
        week = split[3]
        image = split[4]

        if action_class in clipframe:
            sorteddict[user].append(image)
        else:
            sorteddict[user] = [image]

但现在我想要我描述的嵌套结构。我开始初始化我的嵌套字典,就像这个nesteddict[user][month][week].append(image),但我收到了KeyError: 'Bob'。我也明白,如果陈述和条件,我将需要更多。但我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

之前我做过类似的事情:

temp = sorteddict
for key in keys[:-1]:
    if key not in temp:
        temp[key] = {}
    temp = temp[key]
temp[keys[-1]] = value

因此,您的密钥需要位于列表中(keys列表),并且该密钥链末尾所需的值位于value

答案 1 :(得分:1)

您可以使用嵌套 collections.defaultdict套来构建数据:

from collections import defaultdict

dct = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))

with open('validation_labels.txt','r') as f:
    for line in f:
        line = line.strip('/photo/')
        user, month, week, image = line.split('_')
        dct[user][month][week].append(image)