如何使用重复键将元组列表转换为字典?

zhw*_*x22 4 python dictionary

我该如何转换元组列表,如:

query_res = [('a3','b6','c1'),
             ('a3','b6','c2'),
             ('a3','b6','c3'),
             ('a3','b7','c4'),
             ('a4','b8','c5'),
             ('a4','b8','c6')]
Run Code Online (Sandbox Code Playgroud)

像这样的字典:

result = {
    'a3': {
        'b6': ['c1', 'c2', 'c3'],
        'b7': ['c4']
    },
    'a4': {
        'b8': ['c5', 'c6']
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了defaultdict,错误只能获取内部dict,如何映射ares此处?:

res = defaultdict(list)
for a, b, c in query_res:
    res[b].append(c)
Run Code Online (Sandbox Code Playgroud)

Rak*_*esh 6

使用 dict.setdefault

例如:

query_res = [('a3','b6','c1'),
             ('a3','b6','c2'),
             ('a3','b6','c3'),
             ('a3','b7','c4'),
             ('a4','b8','c5'),
             ('a4','b8','c6')]

result = {}
for key, subkey, value in query_res:
    result.setdefault(key, {}).setdefault(subkey, []).append(value)

print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

{'a3': 
    {'b6': ['c1', 'c2', 'c3'], 
     'b7': ['c4']
     },
 'a4': 
    {'b8': ['c5', 'c6']
     }
}
Run Code Online (Sandbox Code Playgroud)