如何从字典提取指定键值并将剩余键值转为字典组成元组?
问题:将指定格式字典转换为特定结构元组
我有如下格式的字典:
{ "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
相关产品推荐
相关产品推荐

