通过列表理解具有重复键的字典元组列表?
问题内容:
我有一个包含重复项的元组列表,并使用在这里找到的以下代码将它们转换为字典:
https://stackoverflow.com/a/61201134/2415706
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循环都可以重写为理解力,所以我想练习,但是过去一个小时我未能完成一项工作。
我读了这篇文章: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}