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

如何从字典提取指定键值并将剩余键值转为字典组成元组?

问题:将指定格式字典转换为特定结构元组

我有如下格式的字典:

{
    "name": "id",
    "data_type": "int",
    "min_value": "10",
    "max_value": "110"
}

希望将其转换为一个元组:元组前两个元素是字典中name和data_type对应的值,剩余键值对组成新字典作为元组的第三个元素,最终结果如下:

('id', 'int', {'min_value': '10', 'max_value': '110'})

我自己实现的代码如下,能正常运行,但想知道有没有更优的写法:

for item in input:
    name = item['name']
    del item['name']

    data_type = item['data_type']
    del item['data_type']

    tup = (name, data_type, {**item})
    print(tup) # ('id', 'int', {'min_value': '10', 'max_value': '110'})

更优实现方式

方法1:用pop方法避免手动删除(可选保留原字典)

你的代码用del会直接修改原字典,如果不想改动输入数据,推荐用pop()——它会取出对应值并移除键,还能给不存在的键设置默认值防止报错:

for item in input:
    # 取出值并从原字典移除键
    name = item.pop('name')
    data_type = item.pop('data_type')
    # 用copy()避免后续修改item影响元组里的字典
    tup = (name, data_type, item.copy())
    print(tup)

如果不需要保留原字典,直接用item作为第三个元素即可,省掉copy步骤:

for item in input:
    name = item.pop('name')
    data_type = item.pop('data_type')
    tup = (name, data_type, item)
    print(tup)

方法2:不修改原字典的纯读取写法

如果完全不想碰原字典,用字典推导式提取剩余键值对就行:

for item in input:
    name = item['name']
    data_type = item['data_type']
    # 过滤掉name和data_type,生成新字典
    rest_dict = {k: v for k, v in item.items() if k not in {'name', 'data_type'}}
    tup = (name, data_type, rest_dict)
    print(tup)

这种写法完全不影响原数据,适合需要保留输入字典的场景。

方法3:更紧凑的简洁写法

如果追求代码简洁,Python 3.8+可以直接把逻辑压缩到一行元组里:

for item in input:
    tup = (
        item['name'],
        item['data_type'],
        {k: v for k, v in item.items() if k not in {'name', 'data_type'}}
    )
    print(tup)

结合pop的版本更短:

for item in input:
    tup = (item.pop('name'), item.pop('data_type'), item.copy())
    print(tup)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:57:23