Python中如何通过类SQL语句过滤字典列表?
类SQL语法筛选字典列表实现方案
你有一组结构统一的嵌套字典列表,示例如下:
dictlist = [ [{'name': '"fight club"', 'rank': 12, 'budget': 450000}, {'name': '"Interstellar"', 'rank': 26, 'budget': 700000}], [{'name':'"se7en"', 'rank': 19, 'budget': 200000}, {'name': '"Hamilton"','rank': 107, 'budget': 650000}] ]
需要支持类SQL语句(如SELECT (name,budget) FROM movies WHERE budget=450000)来完成字段筛选和数据过滤,以下是具体实现方案:
实现步骤
1. 扁平化嵌套字典列表
原数据是二维列表,先转成一维列表方便后续处理:
def flatten_dictlist(nested_list): return [item for sublist in nested_list for item in sublist]
2. 解析类SQL语句
通过字符串处理提取目标字段和过滤条件:
def parse_sql(sql): # 提取SELECT部分的字段 select_part = sql.split('SELECT')[1].split('FROM')[0].strip() fields = [f.strip() for f in select_part.strip('()').split(',')] # 提取WHERE部分的条件(无WHERE时返回None) where_part = sql.split('WHERE')[1].strip() if 'WHERE' in sql else None condition = None if where_part: key, val = where_part.split('=') # 自动转换值的类型(优先整数,否则保留字符串) try: val = int(val) except ValueError: val = val.strip('"\'') condition = (key.strip(), val) return fields, condition
3. 执行筛选和字段提取
结合扁平化数据与解析结果,完成数据处理:
def query_dictlist(dictlist, sql): flat_list = flatten_dictlist(dictlist) fields, condition = parse_sql(sql) # 按条件过滤数据 if condition: key, val = condition filtered = [item for item in flat_list if item.get(key) == val] else: filtered = flat_list # 提取指定字段(自动忽略不存在的字段) result = [{field: item[field] for field in fields if field in item} for item in filtered] return result
测试示例
# 测试SQL语句 sql = 'SELECT (name,budget) FROM movies WHERE budget=450000' result = query_dictlist(dictlist, sql) print(result) # 输出:[{'name': '"fight club"', 'budget': 450000}]
扩展说明
- 上述实现支持基础的
SELECT字段选择和WHERE等值条件过滤 - 若需支持更复杂条件(如>、<、LIKE)或多条件组合,可扩展
parse_sql函数,增加运算符识别和条件拼接逻辑 - 若字段名或值包含特殊字符(逗号、等号),可改用正则表达式实现更精准的字符串解析
内容的提问来源于stack exchange,提问作者Elio Baharan
相关产品推荐
相关产品推荐

