You need to enable JavaScript to run this app. Python 构建重复整数键对应多值聚合字典的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Python 构建重复整数键对应多值聚合字典的实现方法

问题根因说明

Python原生字典的键具备唯一性约束,直接使用dict(zip(binaries, positions))生成字典时,相同键的历史值会被后续值完全覆盖,最终每个键仅能存储遍历过程中最后匹配的位置值,完全无法实现按键聚合的需求。

推荐实现方案(符合Python字典规范的聚合形式)

这种形式也是你提到的第二种期望效果,是工程场景下的通用标准做法:将相同键对应的所有位置值聚合为列表,作为字典的单个值存储。

原生字典实现

不需要引入第三方依赖,通过遍历逐次追加值即可完成聚合:

binaries = [1,1,1,1,1,1,0]
positions = [[200,110,10,50],[200,170,10,50],[150,220,50,10],[140,170,10,50],[140,110,10,50],[150,100,50,10],[150,160,50,10]]

grouped_result = {}
for key, pos in zip(binaries, positions):
    # 键不存在时先初始化空列表,存在则直接追加对应位置值
    if key not in grouped_result:
        grouped_result[key] = []
    grouped_result[key].append(pos)

最终生成的字典结构为:

{
    1: [[200,110,10,50], [200,170,10,50], [150,220,50,10], [140,170,10,50], [140,110,10,50], [150,100,50,10]],
    0: [[150,160,50,10]]
}

更简洁的内置工具实现

使用Python标准库的collections.defaultdict,可以省去键存在性的判断逻辑,代码更精简:

from collections import defaultdict

grouped_result = defaultdict(list)
for key, pos in zip(binaries, positions):
    grouped_result[key].append(pos)

# 如需转回原生普通字典,可直接做类型转换: dict(grouped_result)
关于“支持重复键的字典形式”的说明

Python内置的所有字典结构从语法层面就不支持同键重复存储:就算在代码字面量里写重复键,Python解释器也会自动把同键的前序值覆盖,根本无法生成类似{1: 值1, 1: 值2}的结构。
如果确实需要保留所有原始键值对的对应关系、不做聚合,可以直接将zip生成的键值对转成列表存储,本质上是一组带映射关系的元组序列:

# 保留所有重复键、匹配原始顺序的键值序列
kv_sequence = list(zip(binaries, positions))

最终存储的结构为[(1, [200,110,10,50]), (1, [200,170,10,50]), ..., (0, [150,160,50,10])],不存在字典的键唯一性约束,但是这种结构不属于字典类型,无法通过键直接快速索引对应值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 08:36:01