Преобразование списка в словарь

У меня есть список, который включает:

list = [(Year, 'make', 'model')] 

Используя Python, можно ли преобразовать его в dict, где год является ключом:

 dict = {Year : {'Make' : [models]}} 

пример :

 { 2013:{ 'Scion' : ['FR-S,' 'tC'], 'Subaru' : ['BRZ'], 'Toyota' : ['Land Cruiser', 'Venza'], } 2012:{ 'Scion' : ['FR-S,' 'tC'], 'Subaru' : ['BRZ'], 'Toyota' : ['Venza'], } 

}

 >>> values = [('Year', 'make', 'model')] >>> result = {} >>> for lst in values: ... leaf = result ... for path in lst[:-2]: ... leaf = leaf.setdefault(path, {}) ... leaf.setdefault(lst[-2], list()).append(lst[-1]) ... >>> result {'Year': {'make': ['model']}} 

Не уверен, что правильный ответ уже отправлен, но это то, что я придумал:

 list = [(2012, 'make', 'model'),(2012, 'make', 'model2'),(2013, 'make', 'model')] D = dict() for li in list: if li[0] not in D: D[li[0]] = { li[1]: [li[2]] } elif li[1] not in D[li[0]]: D[li[0]][li[1]] = li[2] else: D[li[0]][li[1]].append(li[2]) print (D) 

Единственный трюк здесь – получить правильную инициализацию defaultdict . Остальная часть кода становится очень простой.

 from collections import defaultdict D = defaultdict(lambda: defaultdict(list)) for year, make, model in the_list: D[year][make].append(model) print(D) 

Lookup collections.defaultdict

 L = [('Year', 'make', 'model')] answer = collections.defaultdict(lambda : collections.defaultdict(list)) for year, make, model in L: answer[year][make].append(model) 

Да, это дикт внутри дикта. Вы хотите, чтобы ваш дикт был

 cardict = {year1:{make1:[model1,model2...],...},...} 

где ваши точки – это другие годы, модели и модели. Я не уверен, как вы хотите ввести его, хотите ли вы автоматическую систему ввода или парсер или что, но вопрос требует, чтобы внутри внутри dict содержался список внутри dict, и это так.

Если у вас есть более конкретные вопросы, разместите свой код, и вы получите помощь.

Изменить: я думаю, что встроенный словарь python должен быть достаточным; Я действительно не думаю, что вам нужно импортировать любые словари.