我有一个由key:[list]组成的字典,其中列表是固定的偶数个二进制值,即:
{'a':[0,1,1,0,0,1],'b':[1,1,1,0,0,0]}
对于每个键,我需要为原始字典中的每个对值返回一个新值,这样对于pair(1,1)= 3,pair(0,1)= 2,对(1,0)= 1,对(0,0)= 0。
对于上面的示例,输出将是:
{'a':[2,1,2],'b':[3,1,0]}
一般都是python和编程的新手,并没有找到我在SO上寻找的东西。建议表示赞赏。
答案 0 :(得分: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]}
答案 1 :(得分: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's 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]}
答案 2 :(得分: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]}