gpt4 book ai didi

python - 在 Python 中进行列表/字典理解时是否可以访问当前对象?

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:57 25 4
gpt4 key购买 nike

试图想出一个单行代码来实现以下(对一个键的所有值求和):

>>> data = [('a',1),('b',3),('a',4),('c',9),('b',1),('d',3)]
>>> res = {}
>>> for tup in data:
... res[tup[0]] = res.setdefault(tup[0],0) + tup[1]
...
>>> res
{'a': 5, 'c': 9, 'b': 4, 'd': 3}

不使用任何导入的单行版本,如 itertools、collections 等。

 { tup[0] : SELF_REFERENCE.setdefault(tup[0],0) + tup[1]  for tup in data }

在 Python 中是否可以使用对当前正在理解的对象的引用?如果没有,有没有办法在不使用任何导入的情况下在单行中实现这一点,即使用基本列表/字典理解和内置函数。

最佳答案

不,没有。字典理解为每次迭代生成一个项,您的代码需要生成更少项(合并值)。

如果不使用(丑陋的、非 pythonic 的)副作用技巧,就无法访​​问在早期迭代中生成的 key 。 comprehension 要生成的 dict 对象还不存在,所以也没有办法生成自引用。

只要坚持你的 for 循环,它的可读性要高得多。

替代方法是使用排序和分组,O(NlogN) 算法与直接循环的简单 O(N) 算法:

from itertools import groupby
from operator import itemgetter

res = {key: sum(t[1] for t in group)
for key, group in groupby(sorted(data, key=itemgetter(0)), key=itemgetter(0))}

关于python - 在 Python 中进行列表/字典理解时是否可以访问当前对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com