【发布时间】:2020-09-30 13:05:53
【问题描述】:
我有一个包含重复项的元组列表,我已经使用我在此处找到的代码将它们转换为字典:
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 会改变一些东西。
【问题讨论】:
-
没有直接的等价物,因为
result在您使用 dict 理解时不存在。微不足道,你可以做不必要的低效:{k:[y for x,y in mylist if x==k] for k,_ in mylist} -
请注意,“我记得学习过大多数 for 循环都可以重写为推导式”这根本不是真的,即使是这样,大多数循环也不应该 被重写为推导式。 Comprehensions 是声明性构造,用于表达对任意迭代的映射/过滤操作以产生一些容器(list、dict、set...)。 For 循环是命令式结构,是 Python 中的基本控制流结构。就用例而言,根本不等同。
标签: python dictionary-comprehension