Python默认字典给出重复键

时间:2017-03-11 04:31:50

标签: python python-2.7 pyspark defaultdict

当我在python中的默认字典中传递数据时,我得到一个输出:

:E

如何在上面的输出中获得重复的键?

不应该像

15 * 142644/142644.0).round
  #=> 15

我正在运行的代码是

defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1']})                          
defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1']})
defaultdict(<type 'list'>, {'[6, 19, 32, 45]': ['1']})
defaultdict(<type 'list'>, {'[3, 16, 29, 42]': ['1']})

是另一个词典

调用函数defaultdict(<type 'list'>, {'[0, 13, 26, 39]': ['1', '1']}) defaultdict(<type 'list'>, {'[6, 19, 32, 45]': ['1']}) defaultdict(<type 'list'>, {'[3, 16, 29, 42]': ['1']}) 来处理Spark RDD,如下所示:

def make_bands(value):
    d2 = defaultdict(list)
    for key, val in value.iteritems():
        d2[(str(list(val[0:4])))].append("1")

    print d2

1 个答案:

答案 0 :(得分:2)

首先,不,你不能指望输出是你想要的。呼叫之间不保持d2。每次进入该功能时,它都会重新创建。你仍然可以得到你想要的东西,如果你使用一个类来保持状态,一个生成器(这里不太优雅),或者一个构造一个函数而不是一个lambda的函数(这将是我的选择):

def build_make_bands():
    d2 = defaultdict(list)
    def make_bands(value):
        for key, val in value.iteritems():
            d2[(str(list(val[0:4])))].append("1")
        print d2
    return make_bands

然后你就这样称呼它:

 signatureTable.map(build_make_bands()).collect()