如何构建支持人员与关联数对联合索引的person_values参数
实现目标
构建支持(人员标识, 数对)联合键查询的person_values结构,满足以下查询效果:
person_values['p',(1, 2)]返回2.5person_values['q',(2, 3)]返回7.4
给定基础数据如下:
Pairs = [(1, 2), (1, 7), (2, 3), (2, 5),(3, 4), (3, 5), (4, 1), (4, 5), (5, 2)] Values = [ 2.5, 4.1, 7.4, 5.6, 2.8, 3.7, 6.9, 0.2, 3.2 ] P1 = ['p','q'] p1_pairs = [ [(1, 2), (1, 7), (2, 3)], [(1, 2), (2, 3), (2, 5) ,(5, 2)] ]
实现步骤
- 先将全局的数对列表和对应数值列表打包为字典,实现数对到数值的O(1)快速查询
- 遍历所有人员及其关联的数对,以
(人员, 数对)为键,从全局数对值字典中取值存入结果字典
完整代码
# 构建全局数对到数值的映射 pair_lookup = dict(zip(Pairs, Values)) person_values = {} # 按索引对齐遍历人员和对应的关联数对列表 for person, pairs in zip(P1, p1_pairs): for single_pair in pairs: person_values[(person, single_pair)] = pair_lookup[single_pair]
结果验证
执行以下测试代码可以验证效果符合预期:
assert person_values['p', (1, 2)] == 2.5 assert person_values['q', (2, 3)] == 7.4 assert person_values['p', (1, 7)] == 4.1 assert person_values['q', (5, 2)] == 3.2
说明:Python中
person_values['p',(1, 2)]和person_values[('p',(1, 2))]是完全等价的写法,解释器会自动将逗号分隔的多个索引值打包为元组作为字典键,不需要额外处理。
内容的提问来源于stack exchange,提问作者Hemfri
相关产品推荐
相关产品推荐

