use*_*706 5 python dictionary-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]}
Run Code Online (Sandbox Code Playgroud)
我记得了解到大多数 for 循环都可以重写为推导式,所以我想练习,但在过去的一个小时里我未能完成一项工作。
我读了这个:https : //stackoverflow.com/a/56011919/2415706,现在我还没有找到另一个这样做的库,但我也不确定我想写的这种理解是否是一个坏主意因为 append 会改变事物。
理解旨在按相互独立的序列映射项目,并且不适合聚合,例如您的问题中的情况,其中项目附加到的子列表取决于前一个项目附加到的子列表。
如果必须,您可以使用嵌套理解生成所需的输出,但它会将在O(n)时间复杂度中用循环解决的问题变成一个需要O(n ^ 2)的循环:
{k: [v for s, v in mylist if s == k] for k, _ in mylist}
Run Code Online (Sandbox Code Playgroud)