【发布时间】:2011-02-16 23:05:11
【问题描述】:
我想按键合并两个京都内阁 b-tree 数据库。 (kyoto cabinet python api)。 结果列表应包含两个输入数据库中的任何一个的每个唯一键(及其值)。
以下代码有效,但我认为它很难看。
left_generator/right_generator 是两个cursor 对象。
如果生成器耗尽,get() 返回 None 尤其奇怪。
def merge_join_kv(left_generator, right_generator):
stop = False
while left_generator.get() or right_generator.get():
try:
comparison = cmp(right_generator.get_key(), left_generator.get_key())
if comparison == 0:
yield left_generator.get_key(), left_generator.get_value()
left_generator.next()
right_generator.next()
elif (comparison < 0) or (not left_generator.get() or not right_generator.get()):
yield right_generator.get_key(), right_generator.get_value()
right_generator.next()
else:
yield left_generator.get_key(), left_generator.get_value()
left_generator.next()
except StopIteration:
if stop:
raise
stop = True
一般来说:是否有一个函数/lib 将生成器与 cmp() 合并?
【问题讨论】: