dict中的python闭包类型错误

时间:2014-06-16 17:26:11

标签: python

我正试图从我正在使用的一些算法中获得一些计数值。

这是一个玩具示例:

def Count():
    a = dict(sys=0,dia=0,hr1=0,ox=0,hr2=0,wht=0)
    itr = [0]
    def C(a=a,itr=itr):
        '''closure to sum to a
        '''
        def b( cnt ):
            for k in a:
                #a[k] = a.get(k,None) + cnt.get(k,None) 
                a[k] = a.get(k,0) + cnt.get(k,0)       

            itr.append(1)
            print 'a ', a
            return a
        return b
    c=C()
    return c
    def get():
        return a;

fc=Count()
def toyalgo(fc):
    vitals = ['sys', 'dia', 'hr1', 'ox', 'hr2', 'wht']
    cc = np.random.randint(0,20,size=6)
    cnt = dict(izip( vitals, cc) )
    print 'new count ',cnt
    fc(cnt)
print 'fc'
toyalgo(fc)
toyalgo(fc)

输出与多个(+8)调用类似:

new count  {'wht': 1, 'hr1': 8, 'dia': 18, 'hr2': 13, 'sys': 17, 'ox': 5}
a  {'sys': 17, 'wht': 1, 'ox': 5, 'hr1': 8, 'dia': 18, 'hr2': 13}
new count  {'wht': 2, 'hr1': 12, 'dia': 12, 'hr2': 19, 'sys': 13, 'ox': 1}
a  {'sys': 30, 'wht': 3, 'ox': 6, 'hr1': 20, 'dia': 30, 'hr2': 32}

不幸的是,当在真实数据集上运行时,如果没有

,则无法通过5次调用
TypeError: unsupported operand type(s) for +: 'int' and 'list'

我认为这是因为缺少值,所以我只是试图从None更改为0,但没有运气。

任何帮助都很棒!

- get()只是为了获得闭包变量a,即计数。 (未经测试的不确定也许def get(a=a): return a是正确的方法......)

- 返回fc(cnt)没有运气;尽管如此,我确实认为这是SO上另一个问题的解决方案,具有相同的TypeError。

---编辑--- 好评! 使用not isinstance()进行调试检测到错误。列表正在通过!

0 个答案:

没有答案