如何在Python列表嵌套字典中为元素新增取next start_len值的end_len键
实现方法
错误原因
你之前的实现逻辑偏差,枚举的是单个字典内部键值对的索引,因此得到的结果是start_len加字典内key的索引值,和你要取同列表下一个元素的start_len的需求完全不符。
最优实现
以下实现时间复杂度为O(n),n为所有start_len元素的总个数,没有多余计算开销:
方案1:直接修改原数据
inputt = [ {'i': [{'start_len': 261}, {'start_len': 450}, {'start_len': 172}, {'start_len': 17}]}, {'i': [{'start_len': 484}, {'start_len': 20}, {'start_len': 0}]} ] for entry in inputt: sl_list = entry['i'] list_len = len(sl_list) for idx, item in enumerate(sl_list): item['end_len'] = sl_list[idx+1]['start_len'] if idx < list_len - 1 else item['start_len'] # 验证输出 print(inputt)
方案2:保留原数据,生成新输出对象
如果不想修改原始输入数据,使用如下实现:
inputt = [ {'i': [{'start_len': 261}, {'start_len': 450}, {'start_len': 172}, {'start_len': 17}]}, {'i': [{'start_len': 484}, {'start_len': 20}, {'start_len': 0}]} ] output = [] for entry in inputt: sl_list = entry['i'] new_sl = [] list_len = len(sl_list) for idx, item in enumerate(sl_list): new_item = item.copy() new_item['end_len'] = sl_list[idx+1]['start_len'] if idx < list_len -1 else new_item['start_len'] new_sl.append(new_item) output.append({'i': new_sl}) # 验证输出 print(output)
两种方案运行后得到的结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者gm tom
相关产品推荐
相关产品推荐

