Python如何高效查找两个字典中平均值最小的键(无需遍历全键)
解决方案
平均值的大小和两个字典对应值的和的大小完全正相关(除以2是固定系数,不影响排序结果),你可以直接用Python内置的min()函数实现,不需要手动写遍历逻辑,底层由C实现的遍历效率远高于Python层面的手动循环:
d1 = {'A' : 1, 'B' : 2,'C' : 9} d2 = {'A' : 5, 'B' : 1,'C' : 10} # 两个字典键完全一致时直接使用 min_key = min(d1, key=lambda k: d1[k] + d2[k]) print(min_key) # 示例输出为B
如果两个字典的键可能存在差异,仅统计共同存在的键,可以先取键的交集再计算:
common_keys = d1.keys() & d2.keys() min_key = min(common_keys, key=lambda k: d1[k] + d2[k])
关于无需遍历所有键的说明
如果你的需求是完全不遍历所有键就能得到结果,只有提前维护额外数据结构才能实现:比如提前为两个字典分别维护按值升序的最小堆,你可以通过双指针比对堆顶元素的方式,在O(1)~O(log n)的时间复杂度内得到结果,不需要遍历全量键。
如果是普通的Python字典结构,必须遍历所有键才能确定最小和对应的键,但内置min的性能已经足够应对绝大多数业务场景,不需要手动实现遍历逻辑。
内容的提问来源于stack exchange,提问作者armin
相关产品推荐
相关产品推荐

