【发布时间】:2014-05-10 10:33:31
【问题描述】:
在阅读了wonderful article 关于通过使用内置迭代器和隐式循环在 Python 中加速循环之后,我在我的代码中进行了尝试。它在许多部分都运行良好,但一小部分仍然让我烦恼 - 我迭代的值有时存储为作为字典值的类的字段,我无法摆脱循环遍历我的字典来检索它们。
这是我的代码的简化版本:
class Pair:
def __init__(self):
self.radius = 0.0
indices = [(x, y) for y in range(5) for x in range(5)]
d = {}
for (x, y) in indices:
d[x, y] = Pair()
d[x, y].radius = (x ** 2 + y ** 2) ** 0.5
sub_list = [(1, 2), (2, 3), (3, 4)]
values = [d[ind].radius for ind in sub_list] # <-- main problem
print reduce(lambda x, y: x + y, values)
所以字典d 有元组(x, y) 作为键和Pair 实例作为值,我的目标是对给定的sub_list 的半径求和(sub_list 可能是整个字典) .是否有任何“广播”技术,或者标记线中的循环是不可避免的?
顺便说一句 - 我是初学者,所以任何关于代码的有用评论(包括样式和 Pythonish 将不胜感激。
谢谢!
【问题讨论】:
-
@zmo 在他的回答中提到,
.radius的使用是不必要的,因为它可以只是字典值 (d[x, y] = radius)。我注意到这只是示例,在实际代码中我还有更多字段,不能简单地是字典的值。
标签: python for-loop dictionary