我从我的数据库中提取了一些列表:
print(liste)
[('VEST', 'MODEL-1', 'BEIGE', 'M'),
('VEST', 'MODEL-1', 'BEIGE', 'S'),
('JACKET', 'MOD-1', 'GREEN', 'S'),
('JACKET', 'MOD-1', 'GREEN', 'M'),
('JACKET', 'MOD-2', 'BLACK', 'L'),
('JACKET', 'MOD-2', 'BLACK', 'XL')]现在我需要像这样创建一个dict:
mydict = {'VEST' : {'MODEL-1' : {'BEIGE' : ('S', 'M')}},
'JACKET' : ({'MOD-1' : {'GREEN' : ('S', 'M')}},
{'MOD-2' : {'BLACK' : ('L', 'XL')}})}我将在tkinter中使用它,比如json。我需要选择这样的东西:
print(mydict['JACKET'][1]['MOD-2']['BLACK'][0])
L
# Or
print(mydict['VEST']['MODEL-1']['BEIGE'][0])
S如何创建字典?我厌倦了尝试不同的方式。如果我能得到好的建议,我会很高兴。
发布于 2017-06-14 05:43:20
您所显示的内容并不十分一致,但我认为您可以从使用collections.defaultdict中获益
In [1]: from collections import defaultdict
In [2]: liste = [('VEST', 'MODEL-1', 'BEIGE', 'M'),
...: ('VEST', 'MODEL-1', 'BEIGE', 'S'),
...: ('JACKET', 'MOD-1', 'GREEN', 'S'),
...: ('JACKET', 'MOD-1', 'GREEN', 'M'),
...: ('JACKET', 'MOD-2', 'BLACK', 'L'),
...: ('JACKET', 'MOD-2', 'BLACK', 'XL')]
In [3]: mydict = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
In [4]: for kind, model, color, size in liste:
...: mydict[kind][model][color].append(size)
...:
In [5]: mydict['VEST']['MODEL-1']['BEIGE']
Out[5]: ['M', 'S']defaultdict构造函数接受一个“工厂”函数作为参数,也就是调用一个没有参数的可调用函数来替换缺少的值。例如,当您尝试访问defaultdict(list)时,对于每个缺少的键,它都会有一个空列表。
在本例中,我创建了一个嵌套的defaultdict对象,它为每个键创建另一个defaultdict。内部的还创建了一个defaultdict,它也使用defaultdict作为工厂。这反映了您的数据层次结构,并为您节省了对缺少键的多次检查或异常处理。
发布于 2017-06-14 05:52:21
你可以尝试@LevLevitsky演示的defaultdict,或者你可以尝试这种可行的,尽管复杂的方法:
result = {}
for i in liste:
if i[0] not in result.keys():
result[i[0]] = {i[1]: {i[2]: tuple(i[3:4])}}
else:
if i[1] not in result[i[0]].keys():
result[i[0]][i[1]] = {i[2]: tuple(i[3:4])}
else:
if i[2] not in result[i[0]][i[1]].keys():
result[i[0]][i[1]][i[2]] = tuple(i[3:4])
else:
result[i[0]][i[1]][i[2]]+=tuple(i[3:4])
print result #{'JACKET': {'MOD-2': {'BLACK': ('L', 'XL')}, 'MOD-1': {'GREEN': ('S', 'M')}}, 'VEST': {'MODEL-1': {'BEIGE': ('M', 'S')}}}https://stackoverflow.com/questions/44531951
复制相似问题