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

Python:如何将未匹配特定键映射到指定值?求实现方案

特定键映射指定值的代码实现方案

我想要编写代码,通过对比键名获取对应值并赋值,但对于未匹配的特定键,需要在同一循环迭代时将其映射到指定的对应值。例如:non_resource_bookable_capacity需映射到data中的ert值,utc_start_at需映射到data中的time值,而非随机映射。现有代码无法实现该逻辑,以下是代码示例及预期输出:

现有代码

import json

data = {"time": "2018-09-29T16:45:00+0000","test":"gfds","ert":"erty"}
#data1 = json.loads(json_data) # json_data is a placeholder for your json
keys = ['results_count', 'test', 'utc_start_at', 'non_resource_bookable_capacity']

    
def find_key_value_pairs(q, keys, dicts=None):
    if not dicts:
        dicts = [q]
        q = [q]  

    data = q.pop(0)
    if isinstance(data, dict):
        data = data.values()

    for d in data:
        dtype = type(d)
        if dtype is dict or dtype is list:
            q.append(d)
            if dtype is dict:
                dicts.append(d)

    if q:
        return find_key_value_pairs(q, keys, dicts)

    return [(k, v) for d in dicts for k, v in d.items() if k in keys]
results = find_key_value_pairs(data, keys)
json_Obj={}
for k, v in results:
    json_Obj.update({k:v})

print(json_Obj)

预期输出

{
    'utc_start_at': '2018-09-29T16:45:00+0000', 
    'non_resource_bookable_capacity': 'erty',
    'test': 'gfds'
}

解决方案

核心思路是提前定义特殊键的映射规则,在完成常规键匹配后,单独处理这些需要特殊映射的键,确保它们获取到指定的对应值。同时可以过滤掉原始数据中不存在的键(比如results_count)。

修改后的完整代码如下:

import json

data = {"time": "2018-09-29T16:45:00+0000","test":"gfds","ert":"erty"}
keys = ['results_count', 'test', 'utc_start_at', 'non_resource_bookable_capacity']
# 定义特殊键的映射规则:目标键 -> 原始数据中的源键
key_mapping = {
    'utc_start_at': 'time',
    'non_resource_bookable_capacity': 'ert'
}

def find_key_value_pairs(q, keys, dicts=None):
    if not dicts:
        dicts = [q]
        q = [q]  

    data = q.pop(0)
    if isinstance(data, dict):
        data = data.values()

    for d in data:
        dtype = type(d)
        if dtype is dict or dtype is list:
            q.append(d)
            if dtype is dict:
                dicts.append(d)

    if q:
        return find_key_value_pairs(q, keys, dicts)

    return [(k, v) for d in dicts for k, v in d.items() if k in keys]

# 收集常规匹配的键值对
results = find_key_value_pairs(data, keys)
json_Obj = dict(results)

# 处理特殊映射的键
for target_key, source_key in key_mapping.items():
    if source_key in data:
        json_Obj[target_key] = data[source_key]

# 过滤掉原始数据中不存在的键(可选,根据需求调整)
json_Obj = {k: v for k, v in json_Obj.items() if k in keys and v is not None}

print(json_Obj)

代码说明

  1. 映射规则定义:通过key_mapping字典明确指定需要特殊处理的目标键和对应的原始数据源键,逻辑清晰且易于维护。
  2. 常规匹配保留:保留原有的find_key_value_pairs函数,用于获取原始数据中直接匹配的键值对(比如test)。
  3. 特殊键赋值:遍历映射规则,从原始数据中取出对应的值,覆盖或添加到结果字典中。
  4. 可选过滤:最后过滤掉原始数据中不存在的键(比如results_count),确保输出与预期一致。

运行上述代码后,输出结果将完全符合预期。


内容的提问来源于stack exchange,提问作者ditil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:01:00