如何从字典列表创建指定格式的Python字典?
问题解决:从字典列表生成按NUM分组的ID列表字典
原代码存在的问题
- 字典键赋值错误:使用
data2[data2] = _id是语法错误,正确应该以num作为键,且初始值为包含当前ID的列表 - 未处理重复NUM的情况:当NUM已存在于字典中时,没有将新ID追加到对应列表,导致只保留第一个ID
- 提取ID的方式不够健壮:直接用
split('-')[-1]如果后续格式变化容易出错(可选优化)
修正后的基础实现
data = [{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-16'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-12'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-9'}, {'object':'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-4'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-11'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-8'}] data2 = {} for row in data: obj = row['object'] # 提取NUM值 num = obj.split('/')[3].split('-')[-1] # 提取ID值(改为按分割后的第4部分提取,更准确) _id = int(obj.split('/')[4].split('-')[-1]) # 更新字典:不存在则初始化列表,存在则追加ID if num not in data2: data2[num] = [_id] else: data2[num].append(_id) print(data2)
执行后输出:
{'13': [16, 4], '131': [12, 11], '132': [9, 8]}
更健壮的优化实现(适配格式变化)
如果后续object字段的部分顺序可能改变,建议先解析所有键值对再提取NUM和ID:
data = [{'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-16'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-12'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-9'}, {'object':'XXXX-TSS/RDID-1579/NBLO-723/NUM-13/ID-4'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-131/ID-11'}, {'object': 'XXXX-TSS/RDID-1579/NBLO-723/NUM-132/ID-8'}] data2 = {} for row in data: obj = row['object'] # 解析每个部分为键值对 info = {} for part in obj.split('/')[1:]: # 跳过开头的XXXX-TSS部分 key, value = part.split('-', 1) # 仅分割第一个'-',避免值含'-'的情况 info[key] = value num = info['NUM'] _id = int(info['ID']) # 更新字典:用setdefault简化判断逻辑 data2.setdefault(num, []).append(_id) print(data2)
内容的提问来源于stack exchange,提问作者Mousam Jha
相关产品推荐
相关产品推荐

