在保持重复键的同时,从键,值元组列表创建一个dict

Chr*_*att 13 python

所以我对以下方面的效果有了理解:

dict((x.key, x.value) for x in y)
Run Code Online (Sandbox Code Playgroud)

当然,问题在于,如果有多个x.key具有相同值的s,则它们会与最后一个x.value具有x.key相同的唯一幸存成员折叠.我想实际将结果dict的值设为列表:

{
    'key1': ['value1'],
    'key2': ['value2', 'value3', 'value4'],
    'key3': ['value5'],
    # etc.
}
Run Code Online (Sandbox Code Playgroud)

这种逻辑是否可以理解?

Eri*_*got 23

您可以将元素逐个添加到包含空列表的字典中:

import collections

result_dict = collections.defaultdict(list)
for x in y:
    result_dict[x.key].append(x.value)
Run Code Online (Sandbox Code Playgroud)

您还可以执行非常类似的操作,而无需使用集合模块:

result_dict = {}
for x in y:
    result_dict.setdefault(x.key, []).append(x.value)
Run Code Online (Sandbox Code Playgroud)

但这可以说略显不易清晰.

一个等效的,更易读的(不需要"解析"不太常见setdefault)但更多的行人,基础Python方法是:

result_dict = {}
for x in y:
    if x.key not in result_dict:
        result_dict[x.key] = []
    result_dict[x.key].append(x.value)
Run Code Online (Sandbox Code Playgroud)

第一种解决方案显然是首选解决方案,因为它同时简洁,清晰,快速.