当我在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
答案 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()