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

Python3.6+Django2.0中如何用变量作为字典键取值?

解决方案:匹配字典数据并完善value字段

嘿,我来帮你搞定这个问题!首先得提个小提醒:别用dict当变量名哦,这是Python的内置类型,用它当变量名会覆盖掉内置功能,容易出奇怪的问题,我下面改成obj_value_list来演示。

快速修改你的原有循环

如果不想改动太多现有代码,直接在循环里通过data[x]['title']去匹配对应位置的字典项就能拿到值:

# 重命名变量避免冲突
obj_value_list = [ {'object A': '100'}, {'object B': '101'}, {'object C': '102'}, ]
data = [ {'title': 'object A', 'description': 'Some Text'}, {'title': 'object B', 'description': 'Some Text'}, {'title': 'object C', 'description': 'Some Text'}, ]

output = []
for x in range(0, len(obj_value_list)):
    current_title = data[x]['title']
    j = {
        'id': x,
        'title': current_title,
        'description': data[x]['description'],
        # 直接用title作为键取对应的值
        'value': obj_value_list[x][current_title]
    }
    output.append(j)

更稳妥高效的优化方案(推荐)

上面的写法依赖两个列表的顺序完全一致,如果哪天数据顺序变动就会出错。更稳妥的方式是先把obj_value_list转换成一个统一的字典,这样不管顺序如何,都能通过title快速找到对应的值:

obj_value_list = [ {'object A': '100'}, {'object B': '101'}, {'object C': '102'}, ]
data = [ {'title': 'object A', 'description': 'Some Text'}, {'title': 'object B', 'description': 'Some Text'}, {'title': 'object C', 'description': 'Some Text'}, ]

# 先把分散的小字典合并成一个便于查找的大字典
value_map = {}
for item in obj_value_list:
    # 每个item只有一个键值对,直接取出键和值
    key, val = next(iter(item.items()))
    value_map[key] = val

# 用enumerate循环data,写法更Pythonic,不用依赖列表顺序
output = []
for idx, data_item in enumerate(data):
    j = {
        'id': idx,
        'title': data_item['title'],
        'description': data_item['description'],
        # 直接通过title从大字典里取值
        'value': value_map[data_item['title']]
    }
    output.append(j)

为什么推荐第二种方案?

  • 不依赖顺序:哪怕obj_value_list的顺序被打乱,只要键和data里的title对应,就能正确取值
  • 效率更高:尤其是数据量大的时候,第一种是线性查找,第二种预处理后每次查找都是O(1)的常数时间
  • 更Pythonic:用enumerate代替range(len()),代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:25