将多字典转换为具有重复键值的字典作为列表

Dei*_*eik 7 python dictionary aiohttp

我正在使用 Aiohttp 的 multidict() 实现。拿着它:

>>> d = MultiDict[('a', 1), ('b', 2), ('a', 3)])
>>> d
<MultiDict {'a': 1, 'b': 2, 'a': 3}>
Run Code Online (Sandbox Code Playgroud)

我想转换d为常规字典,其中重复的键值被附加到列表中,如下所示:

{'a': [1, 3], 'b': 2}
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方法来转换它?除了循环遍历项目和大量逻辑条件之外?

Pep*_*tch 5

看起来多重字典没有用于直接转换的内置函数,但您可以使用该.keys()函数迭代多重字典并将值复制到新字典中。

new_dict = {}
for k in set(multi_dict.keys()):
    new_dict[k] = multi_dict.getall(k)
Run Code Online (Sandbox Code Playgroud)

这里有两件有趣的事情 - 我们需要进行一组多字典键函数调用来删除重复项,并且多字典有一个.getall()函数返回与重复键关联的所有值的列表。

编辑单值情况:

new_dict = {}
for k in set(multi_dict.keys()):
    k_values = multi_dict.getall(k)
    if len(k_values) > 1:
        new_dict[k] = k_values
    else:
        new_dict[k] = k_values[0]
Run Code Online (Sandbox Code Playgroud)