0

値のリストを 0、1、2 から 2,2 に変換したい。1,2 および 1,1。私はそれを行うはずの関数を書きました:

def dec2(code):                      
    if code == 0:
        ret_val = '2','2'
    elif code == 1:
         ret_val = '1','2'
    elif code == 2:
         ret_val = '1','1'
    else:
        ret_val = '0','0'
    return ret_val

既製のリストで実行する限り、うまく機能しているようです:

In [87]: a=[1,2,1,2]

In [88]: b=[dec2(x) for x in a]

In [89]: b
Out[89]: [('1', '2'), ('1', '1'), ('1', '2'), ('1', '1')]

ただし、辞書の値を置き換えるために使用しようとすると、UnboundLocalError が発生します。

In [82]: gtps
Out[82]: {11: [1, 2, 1, 2], 22: [2, 2, 1, 1], 33: [1, 9, 0, 2]}
[86]: for k,v in gtps.iteritems():
....:     tmp=[dec2(x) for x in v]
....:     all[k]=tmp
....:
....:
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)

UnboundLocalError: local variable 'ret_val' referenced before assignment

何か案は?

4

1 に答える 1

0

あなたが投稿したコードは、どのような状況でも raise できないためUnboundLocalError、ipython セッションで何かが混乱しています。

代わりにこれを使用します:

_code_map = {0: ('2', '2'), 1: ('1','2'), 2: ('1','1')}
def dec2(code):
    return _code_map.get(code, ('0', '0'))
于 2013-04-18T15:36:19.870 に答える