如何基于参考列表匹配与长度,为字典列表填充对应0值?
按指定样本结构填充字典列表的匹配元素
解决方案代码
data = [{'item': ['cat', 'bat'], 'val': [2, 4]}, {'item': ['fat'], 'val': [23]}, {'item': ['cat', 'bat', 'mat'], 'val': [6, 9, 8]} ] sample = ['aaa', 'aa', 'cat', 'bb', 'fat', 'bbb', 'bat', 'bbbb', 'mat'] # 建立样本元素到索引的映射,用于快速定位 sample_index_map = {item: idx for idx, item in enumerate(sample)} for entry in data: # 初始化与样本长度一致的全0列表 new_item = [0] * len(sample) new_val = [0] * len(sample) # 遍历当前条目的item和对应val,填充到对应位置 for item, val in zip(entry['item'], entry['val']): if item in sample_index_map: pos = sample_index_map[item] new_item[pos] = item new_val[pos] = val # 更新原字典的item和val字段 entry['item'] = new_item entry['val'] = new_val # 查看结果 print(data)
思路说明
- 建立索引映射:用字典推导式把
sample里的每个元素和它的索引绑定,这样可以O(1)时间找到任意元素在样本中的位置,解决了你之前循环追加0无法定位前置匹配项的问题。 - 初始化全0列表:每个字典的
item和val都先创建和sample长度一致的全0列表,保证结构对齐。 - 填充匹配元素:遍历原字典的
item和val对应对,通过映射找到位置后替换0为对应值,非匹配元素的位置保持0不变。
运行上述代码后,输出结果完全符合你的期望。
内容的提问来源于stack exchange,提问作者user22391597
相关产品推荐
相关产品推荐

