我有一本像Python一样的字典
{'OR': [{'AND': [{'column': 'XXX', 'operator': '=', 'value': u'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]}, {'column': 'YYY', 'operator': '>=', 'value': '3.0'}]}
现在,我想把它转换成
^{pr2}$这显然是我认为的相当于pymongo的说法。在
到目前为止,我写的代码是这样的:
FILTMAP = {'>=': '$gte', '<=': '$lte', '>': '$gt', '<': '$lt', "!=":"$ne"}
CONJUNCTION_MAP = {"AND":"$and", "OR":"$or"}
def gen_mongo_filters_json(filter, supplied_key="")
first_key = filters.keys()[0]
if first_key == 'OR' or first_key == 'AND':
if supplied_key == "":
return_dict[CONJUNCTION_MAP[first_key]] = []
else:
temp_dict[CONJUNCTION_MAP[first_key]] = []
#return_dict[supplied_key] = temp_dict
for i in range (len(filters[first_key])):
if supplied_key == "":
return_dict[CONJUNCTION_MAP[first_key]].append(gen_mongo_filters_json(filters[first_key][i], first_key))
else:
temp_dict[CONJUNCTION_MAP[first_key]].append(gen_mongo_filters_json(filters[first_key][i], first_key))
return_dict[CONJUNCTION_MAP[supplied_key]].append(temp_dict)
else:
operator = filters['operator']
if operator == "=":
ret_dict = {filters['column']:filters['value']
return ret_dict
else:
operator = FILTMAP[operator]
ret_dict = {filters['column']:{operator:filters['value']}}
return ret_dict
return return_dict
它产生的输出是:
{u'$or': [{u'$and': [{u'Engine': u'MSN'}, {u'Engine': u'Google'}]}, {u'$and': [{u'Engine': u'MSN'}, {u'Engine': u'Google'}]}, {...}, {u'Imps': {u'$gte': 3.0}}]}
它接近于解,但不是精确解。它适用于像
{'AND': [{'column': 'XXX', 'operator': '=', 'value': 'M'}, {'column': 'XXX', 'operator': '=', 'value': 'N'}]}
OR
{'column': 'YYY', 'operator': '>', 'value': '1000'}
你能给我指个方向吗?在
(我们的想法是创建一个通用的。所以,我想在pymongo语句中生成与任何有效python字典等价的语句。最小值是最后一个)
示例代码不运行,但假定
应转换为
^{pr2}$使用这样的方法:
我不知道将
'3.0'
转换为3.0
是否重要。线是相当老套的,你想用一些适当的逻辑来代替它来处理这些情况。在
谢谢你的回答。我也发现了一些事情。这是完整的代码
请让我知道你的评论
我试过了
^{pr2}$这是输出
谢谢你的回答。也不错。我现在就试试。在
还有一件事,我实际上在我的示例代码中忽略了“值”的考虑。我很感谢你指出这一点。我已经有办法做到了。不管怎样,谢谢你。在
相关问题 更多 >
编程相关推荐