You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于sample_context字段分组提取字典列表中的键值对?

解决方案

你的核心需求是根据sample_context的内容,筛选出对应的数字键值对(比如18421: u'1191'这类)。以下是两种可行的实现方式:

方式一:构建上下文映射(适合多次查询)

先把所有数据按sample_context分组,后续可以快速查询任意上下文对应的键值对:

# 你的原始数据
x = [
    {"sample": {"sample_context": {"board": u'9', "encoder": u'1'}, 18421: u'1191'}},
    {"sample": {"sample_context": {"board": u'5', "encoder": u'1'}, 18422: u'2251'}},
    {"sample": {"sample_context": {"board": u'9', "encoder": u'1'}, 18423: u'2291'}},
    {"sample": {25680: u'3321', "sample_context": {"board": u'2', "encoder": u'1'}}},
    {"sample": {"sample_context": {"board": u'9', "encoder": u'1'}, 29100: u'5591'}}
]

# 构建上下文到键值对的映射
context_map = {}
for item in x:
    sample_data = item["sample"]
    # 提取上下文并移除该字段,得到目标键值对
    ctx = sample_data.pop("sample_context")
    # 将字典形式的上下文转为可哈希的元组(字典不能作为字典的键)
    ctx_key = tuple(sorted(ctx.items()))
    # 合并相同上下文的键值对
    if ctx_key in context_map:
        context_map[ctx_key].update(sample_data)
    else:
        context_map[ctx_key] = sample_data.copy()

# 查询特定上下文的结果
target_ctx = {"board": u'9', "encoder": u'1'}
target_key = tuple(sorted(target_ctx.items()))
print(context_map.get(target_key, {}))
# 输出: {18421: u'1191', 18423: u'2291', 29100: u'5591'}

方式二:直接筛选单次查询的结果

如果只需要查询一次特定上下文,不用构建映射,直接遍历筛选即可:

target_ctx = {"board": u'9', "encoder": u'1'}
result = {}

for item in x:
    sample_data = item["sample"]
    if sample_data["sample_context"] == target_ctx:
        # 复制数据并移除上下文字段
        temp = sample_data.copy()
        temp.pop("sample_context")
        result.update(temp)

print(result)
# 输出: {18421: u'1191', 18423: u'2291', 29100: u'5591'}

说明

你之前用的[sample_sent['sample'] for sample_sent in x]只是取出了每个sample对象,但没有分离sample_context和目标键值对,也没有做上下文匹配。上面的代码通过移除sample_context字段获取目标键值对,再通过上下文匹配筛选出你需要的结果。

内容的提问来源于stack exchange,提问作者Kumar Roshan Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:35:01