【问题标题】:Python: calculate value for each pair of values in listPython:计算列表中每对值的值
【发布时间】:2013-07-17 19:23:10
【问题描述】:

我有一个由 key:[list] 组成的字典,其中列表是固定的偶数个二进制值,即:

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

对于每个键,我需要为原始字典中的每个 pair 值返回一个新值,例如对于 pair(1,1) = 3,pair(0,1) = 2,对(1,0)=1,对(0,0)=0。

对于上面的示例,输出将是:

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

对 python 和一般编程都是新手,还没有找到我在 SO 上寻找的东西。建议表示赞赏。

【问题讨论】:

    标签: python list dictionary


    【解决方案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]}
    

    【讨论】:

      【解决方案2】:
      >>> 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]}
      

      【讨论】:

        【解决方案3】:

        我能想到的一个小sn-p是:

        >>> 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]}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 2021-12-29
          相关资源
          最近更新 更多