如何用TinyDB Query()获取未知顶层键对应的内容?
用TinyDB提取未知顶层键的嵌套内容
核心思路
由于每条数据的结构是单顶层键对应嵌套字典(比如示例中的{'service': {...}}),不管顶层键名称是什么,只需提取每条数据的唯一值即可。结合TinyDB的查询能力,可以先筛选目标数据,再提取嵌套内容。
代码实现
1. 提取所有数据的嵌套内容
from tinydb import TinyDB # 初始化数据库 db = TinyDB('your_db.json') # 获取所有数据并提取嵌套内容 all_nested = [next(iter(item.values())) for item in db.all()]
next(iter(item.values())):直接获取单键数据的唯一值,比list(item.values())[0]更高效。
2. 结合Query过滤后提取
如果需要先筛选符合条件的条目(比如嵌套字典中key1不为空),可以用TinyDB的Query()配合通配符*匹配任意顶层键:
from tinydb import TinyDB, Query db = TinyDB('your_db.json') Q = Query() # 过滤出嵌套字典中key1不为空的条目 filtered_items = db.search(Q['*'].key1 != '') # 提取过滤后的嵌套内容 filtered_nested = [next(iter(item.values())) for item in filtered_items]
3. 兼容多顶层键的情况(可选)
如果存在部分数据有多个顶层键,可以添加判断逻辑:
nested_contents = [] for item in db.all(): if len(item) == 1: nested_contents.append(next(iter(item.values()))) else: # 按需处理多键数据,比如跳过或记录异常 print(f"跳过含多顶层键的数据: {item}")
内容的提问来源于stack exchange,提问作者Venu Reddy
相关产品推荐
相关产品推荐

