所以我对...的影响有了理解:
dict((x.key, x.value) for x in y)
问题当然是,如果有多个x.key
具有相同的值,则它们会与最后x.value
折叠,并且该特定x.key
是唯一幸存的成员。我想实际将结果dict的值设为列表:
{
'key1': ['value1'],
'key2': ['value2', 'value3', 'value4'],
'key3': ['value5'],
# etc.
}
这种逻辑是否可以理解?
答案 0 :(得分:19)
默认情况下,您可以逐个将元素添加到包含空列表的字典中:
import collections
result_dict = collections.defaultdict(list)
for x in y:
result_dict[x.key].append(x.value)
您还可以执行非常类似的操作,而无需使用集合模块:
result_dict = {}
for x in y:
result_dict.setdefault(x.key, []).append(x.value)
但这可以说略显不易清晰。
等效,更易读(不需要“解析”不太常见的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)
第一种解决方案显然是首选解决方案,因为它同时简洁,清晰,快速。
答案 1 :(得分:2)
不。你不能理解这一点。
但您可以使用itertools.groupby
。
答案 2 :(得分:1)
我不是说这是正确的做法,而是出于纯粹的求知欲..
您可以使用itertools.groupby
和lambda
在一个字典理解中执行此操作,如果这是您真正想要做的事情:(其中l
是您要制作的元组列表a dict
出自:
dict((k, [v[1] for v in vs]) for (k, vs) in itertools.groupby(l, lambda x: x[0]))