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)
有没有一种优雅的方法来转换它?除了循环遍历项目和大量逻辑条件之外?
看起来多重字典没有用于直接转换的内置函数,但您可以使用该.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)