2017-04-05 96 views
1

我想填充嵌套字典,但有麻煩,因爲我相當新的python(也堆棧溢出)。拆分輸出來填充嵌套字典python

我有一個包含照片路徑的txt文件,我想將它從拼圖中填充到嵌套字典中。該文本文件的一個例子是這樣的:

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

如果Bob是用戶,一月是一個月,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

使用'COLLEC tions.defaultdict'。 – zondo

+0

您可以使用具有默認值的'get()',例如:'nesteddict.get('Bob',{})' –

回答

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) 
1

我做了這樣的事情之前:

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

所以,你的鑰匙就需要在你想在這鑰匙鏈末端的列表(keys列表)和值在value