通过列表理解将具有重复键的字典的元组列表?

List of tuples to dictionary with duplicates keys via list comprehension?

我有一个包含重复项的元组列表,我已使用我在此处找到的代码将它们转换为字典:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}

我记得学过大多数 for 循环都可以重写为推导式,所以我想练习一下,但在过去的一个小时里我没能完成一个工作。

我读到这个: 现在我找不到另一个库来做这个但是我也不确定我想写的这个理解是否是一个坏主意因为追加变异东西。

理解旨在按彼此独立的顺序映射项目,不适用于聚合,例如您问题中的情况,其中项目附加到的子列表取决于子列表前一项附加到。

如果必须的话,您可以使用嵌套理解生成所需的输出,但它会将 O(n) 时间复杂度的循环变成需要 O(n ^ 2) 的一个:

{k: [v for s, v in mylist if s == k] for k, _ in mylist}