我想知道是否可以在Python中实现以下目标:
我有一个嵌套字典nested_dict
,它将每个三元素元组(a, b, c)
映射到一个子字典sub_dict
,我还有另一个列表list_b
包含与上面的元组键中的第二个元素(即用b
表示的元素)对应的所有元素。
给定nested_dict
和list_b
,以及一对固定的a
和c
(即分别是元组键的第一个和第三个元素),我想根据构成元组键一部分的list_b
元素在子字典上获得一个排序迭代器,换句话说, 通过使用这个迭代器,我可以像这样遍历返回的子字典:
nested_dict[(a, b_1, c)], nested_dict[(a, b_2, c)], nested_dict[(a, b_3, c)], ...
其中,b_1 < b_2 < b_3 ...
和每个b_i
都在list_b
我沿着这条思路思考:
def sorted_dict_itr (nested_dict, list_b, a, c):
return (nested_dict[(a, b, c)] for b in sorted(list_b))
但是这总是按b
顺序返回nested_dict[(a, b, c)]
的迭代器吗?如果是这样,是否有更有效的方法(意味着更快的代码)来实现相同的目标?
是的,它有效。
保留已排序的集合而不是保留list_b并动态对其进行排序将提高效率,但当然,它可能会降低其他更重要的地方的效率。
没有其他方法可以提高算法的复杂性 - 字典查找是恒定时间,迭代列表的速度与迭代任何可能的速度一样快。
通过避免以各种不同的方式散列每个(a,b,c)元组的需要,您可以通过一个小的常数因素来加快速度,但我怀疑这会有很大的不同。
您可以通过与变量范围相关的各种微优化以及是否产生值或返回生成器来通过一些操作码来加快速度,但很难想象这很重要。
是的,它应该,假设你想要默认sorted()
强加的b
元素的排序。