我正在尝试填充嵌套字典,但由于我是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'
。我也明白,如果陈述和条件,我将需要更多。但我不知道从哪里开始。
答案 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)