通过字典和numpy数组同时迭代

时间:2013-10-07 15:01:04

标签: python arrays dictionary numpy

是否有一种灵活的方式来迭代对象字典,调用每个对象的成员函数并将值赋给numpy数组。我有以下成员函数代码:

    # Preallocate for Number of Objects in the dictionary
    newTable = numpy.zeros( self.numObj );

    for item, nt in zip( self.dictTable.values(), newTable ):
        dt = item.CalculateDutyCycle() * 100.0


    return newTable    

这不会运行,因为我对numpy数组的赋值没有正确完成。我可以使用nditer正确地完成它,但不确定如何将该迭代器与字典表迭代结合起来。我正在避免使用传统的“计数器”增量来访问数组,因为有更优雅的'pythonic'解决方案。

2 个答案:

答案 0 :(得分:3)

如果您使用enumerate,则无需显式增加计数器。你可以这样做:

newTable = numpy.zeros( self.numObj )
for k, item in enumerate(self.dictTable.values()):
    newTable[k] = item.CalculateDutyCycle() * 100.0

答案 1 :(得分:1)

我没有看到在这里使用numpy有任何好处,因为您正在迭代常规Python列表(values())。我只是做一个列表理解,然后将其转换为数组。你的阵列也是1d。使用多维对象(而不是简单列表)时,numpy会发光。

list_answer = [item.CalculateDutyCycle() * 100.0 for item in self.dictTable.values()]
newTable = np.array(list_answer)