Python 默认字典给出重复键
Python default dictionary giving duplicate key
当我在 python 的默认字典中传递数据时,我得到一个输出:
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']})
我运行的密码是
def make_bands(value):
d2 = defaultdict(list)
for key, val in value.iteritems():
d2[(str(list(val[0:4])))].append("1")
print d2
value是另一个字典
调用函数make_bands
处理Spark RDD如下:
signatureBands = signatureTable.map(lambda x: make_bands(x)).collect()
首先,不,你不能期望输出是你想要的。 d2 不会在调用之间保留。每次您进入该功能时都会重新创建它。如果你使用 class 来保持状态,你仍然可以获得你想要的东西,一个生成器(这在这里不太优雅),或者一个构造函数而不是 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()
当我在 python 的默认字典中传递数据时,我得到一个输出:
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']})
我运行的密码是
def make_bands(value):
d2 = defaultdict(list)
for key, val in value.iteritems():
d2[(str(list(val[0:4])))].append("1")
print d2
value是另一个字典
调用函数make_bands
处理Spark RDD如下:
signatureBands = signatureTable.map(lambda x: make_bands(x)).collect()
首先,不,你不能期望输出是你想要的。 d2 不会在调用之间保留。每次您进入该功能时都会重新创建它。如果你使用 class 来保持状态,你仍然可以获得你想要的东西,一个生成器(这在这里不太优雅),或者一个构造函数而不是 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()