1

key:[list] で構成される辞書があります。リストは、固定された偶数のバイナリ値です。つまり、次のようになります。

{'a':[0,1,1,0,0,1],'b':[1,1,1,0,0,0]}

キーごとに、ペア (1,1) = 3、ペア (0,1) = 2、ペア (1,0) = 1 のように、元の辞書の値のペアごとに新しい値を返す必要があります。 、ペア (0,0) = 0。

上記の例では、出力は次のようになります。

{'a':[2,1,2],'b':[3,1,0]}

一般的にPythonとプログラミングの両方が初めてで、SOで探しているものが見つかりませんでした。提案をいただければ幸いです。

4

3 に答える 3

1

最初にペアリング部分だけを攻撃します。

def paired(binlist, map={(1, 1): 3, (0, 1): 2, (1, 0): 1, (0, 0): 0}):
    return [map[tuple(binlist[i:i + 2])] for i in range(0, len(binlist), 2)]

次に、これを辞書に適用します。

{k: paired(v) for k, v in input_dictionary.iteritems()}

デモ:

>>> paired([0,1,1,0,0,1])
[2, 1, 2]
>>> paired([1,1,1,0,0,0])
[3, 1, 0]
>>> input_dictionary = {'a':[0,1,1,0,0,1],'b':[1,1,1,0,0,0]}
>>> {k: paired(v) for k, v in input_dictionary.iteritems()}
{'a': [2, 1, 2], 'b': [3, 1, 0]}
于 2013-07-17T10:12:00.073 に答える
0

私が思いついた小さなスニペットは次のとおりです。

>>> testDict = {'a':[0,1,1,0,0,1],'b':[1,1,1,0,0,0]}
>>> referenceDict = {(0, 1):2, (0, 0):0, (1, 0):1, (1, 1):3}
>>> for key, value in testDict.items():
        finalList = [referenceDict[elem] for elem in zip(value[::2], value[1::2])]
        testDict[key] = finalList       
>>> testDict
{'a': [2, 1, 2], 'b': [3, 1, 0]}

value[::2]Python の Slice Notationです。

これを使用する関数にパックします:

def testFunction(inputDict):
    referenceDict = {(0, 1):2, (0, 0):0, (1, 0):1, (1, 1):3}
    for key, value in inputDict.items():
        finalList = [referenceDict[elem] for elem in zip(value[::2], value[1::2])]
        inputDict[key] = finalList
    return inputDict

例 -

>>> testFunction({'a':[0,1,1,0,0,1],'b':[1,1,1,0,0,0]})
{'a': [2, 1, 2], 'b': [3, 1, 0]}
于 2013-07-17T10:14:44.197 に答える
0
>>> D = {'a': [0, 1, 1, 0, 0, 1],'b': [1, 1, 1, 0, 0, 0]}
>>> {k: [v[i] + 2 * v[i+1] for i in range(0, len(v), 2)] for k, v in D.items()}
{'a': [2, 1, 2], 'b': [3, 1, 0]}
于 2013-07-17T11:22:12.083 に答える