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

基于字典项值控制为字典列表添加新数值ID的技术问询

基于字典项值分配自定义ID的解决方案

看起来你想要根据字典里的HID这类字段来定制id的分配逻辑,而不是简单的连续递增。我给你整理了几种常见场景的解决方案,你可以根据自己的实际需求选择:

首先先明确你的原始数据和当前遇到的问题:

我拥有一个包含各年份家庭标识(HID)的字典列表:

list_of_dicts = [{'HID':'1','year':'2017'}, {'HID':'1','year':'2018'}, {'HID':'2','year':'2017'}, {'HID':'2','year':'2018'}, {'HID':'3','year':'2017'}, {'HID':'3','year':'2018'}]

我需要遍历每个字典并添加一个新的数值型id,且希望基于其他项的值来控制该id的分配。我尝试了如下代码:

i = 0 
for line in list_of_dicts: 
    line['id'] = i 
    i += 1 

但该代码会生成连续递增的id,无法满足基于其他项值控制的需求。


场景1:同一个HID对应同一个ID

如果希望所有拥有相同HID的字典条目共享同一个id,可以用一个辅助字典来记录每个HID对应的id值。遍历的时候检查当前HID是否已经在辅助字典里:存在就直接用对应的id,不存在就分配新的id并更新辅助字典。

代码示例:

list_of_dicts = [{'HID':'1','year':'2017'}, {'HID':'1','year':'2018'}, {'HID':'2','year':'2017'}, {'HID':'2','year':'2018'}, {'HID':'3','year':'2017'}, {'HID':'3','year':'2018'}]

# 辅助字典,映射HID到对应的id
hid_to_id = {}
current_id = 0

for line in list_of_dicts:
    hid = line['HID']
    if hid not in hid_to_id:
        hid_to_id[hid] = current_id
        current_id += 1
    line['id'] = hid_to_id[hid]

# 查看结果
for item in list_of_dicts:
    print(item)

运行后输出结果:

{'HID': '1', 'year': '2017', 'id': 0}
{'HID': '1', 'year': '2018', 'id': 0}
{'HID': '2', 'year': '2017', 'id': 1}
{'HID': '2', 'year': '2018', 'id': 1}
{'HID': '3', 'year': '2017', 'id': 2}
{'HID': '3', 'year': '2018', 'id': 2}

场景2:按HID+Year组合分配唯一ID

如果需要每个(HID, year)的组合对应唯一的id(这种情况其实和你原来的连续id结果一致,但逻辑是基于字段组合来分配的),同样用辅助字典来记录组合与id的映射:

list_of_dicts = [{'HID':'1','year':'2017'}, {'HID':'1','year':'2018'}, {'HID':'2','year':'2017'}, {'HID':'2','year':'2018'}, {'HID':'3','year':'2017'}, {'HID':'3','year':'2018'}]

# 辅助字典,映射(HID, year)组合到对应的id
combo_to_id = {}
current_id = 0

for line in list_of_dicts:
    combo = (line['HID'], line['year'])
    if combo not in combo_to_id:
        combo_to_id[combo] = current_id
        current_id += 1
    line['id'] = combo_to_id[combo]

# 查看结果
for item in list_of_dicts:
    print(item)

运行后输出结果:

{'HID': '1', 'year': '2017', 'id': 0}
{'HID': '1', 'year': '2018', 'id': 1}
{'HID': '2', 'year': '2017', 'id': 2}
{'HID': '2', 'year': '2018', 'id': 3}
{'HID': '3', 'year': '2017', 'id': 4}
{'HID': '3', 'year': '2018', 'id': 5}

场景3:按HID分组,组内按Year递增ID

如果希望同一个HID下,按年份的顺序分配组内的id(比如HID=1的2017对应id=0,2018对应id=1;HID=2的2017也对应id=0,以此类推),可以用嵌套的辅助字典来记录每个HID下各年份对应的id:

list_of_dicts = [{'HID':'1','year':'2017'}, {'HID':'1','year':'2018'}, {'HID':'2','year':'2017'}, {'HID':'2','year':'2018'}, {'HID':'3','year':'2017'}, {'HID':'3','year':'2018'}]

# 嵌套辅助字典:hid -> {year: id}
hid_year_id = {}

for line in list_of_dicts:
    hid = line['HID']
    year = line['year']
    # 初始化当前HID的子字典
    if hid not in hid_year_id:
        hid_year_id[hid] = {}
    # 如果当前年份没记录过,按已有的年份数量分配新id(确保顺序正确)
    if year not in hid_year_id[hid]:
        hid_year_id[hid][year] = len(hid_year_id[hid])
    line['id'] = hid_year_id[hid][year]

# 查看结果
for item in list_of_dicts:
    print(item)

运行后输出结果:

{'HID': '1', 'year': '2017', 'id': 0}
{'HID': '1', 'year': '2018', 'id': 1}
{'HID': '2', 'year': '2017', 'id': 0}
{'HID': '2', 'year': '2018', 'id': 1}
{'HID': '3', 'year': '2017', 'id': 0}
{'HID': '3', 'year': '2018', 'id': 1}

内容的提问来源于stack exchange,提问作者Thirst for Knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:37:07