将列表转换为字典

3

我有一个包括以下内容的列表:

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

使用Python,是否可以将其转换为字典,其中年份是键:

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

例子:

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

}

}


1
是的,我相信这是可能的。如果您没有具体的关于过程的问题,那么如果您遇到困难,您可以随时回来。 - Felix Kling
2
你能给我们提供输入吗? - Seçkin Savaşçı
@FelixKling 是的,我卡住了。我从昨天开始一直在尝试解决这个问题,但是我无法做到,任何帮助都将不胜感激。 - Midimo
1
请贴出您目前的代码,并告诉我们您卡在哪里了。 - Felix Kling
5个回答

3
>>> 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']}}

谢谢,这正是我想要的方式,非常感谢你的帮助。 - Midimo

3

不确定是否已经发布了正确答案,但这是我想出来的:

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)

3

这里唯一需要注意的是正确初始化 defaultdict。然后代码的其余部分就变得非常简单了。

from collections import defaultdict

D = defaultdict(lambda: defaultdict(list))

for year, make, model in the_list:
        D[year][make].append(model)

print(D)

2

查找collections.defaultdict

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

1

是的,它是一个字典内嵌字典。您希望您的字典是

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

在这里,你的点是其他年份、型号等。我不确定你想要如何输入它,是希望自动输入系统还是解析器,但问题是:是否可能在字典内部有一个列表?答案是肯定的。

如果您有更具体的问题,请发布您的代码,您将得到帮助。

编辑:我认为内置的Python字典应该足够了;我真的不认为您需要导入任何其他字典。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接