我想知道是否有可能在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))
但是这总是会按nested_dict[(a, b, c)]
的顺序返回b
上的迭代器吗?如果是这样,有没有更有效的方法(意味着更快的代码)来实现相同的目标?
答案 0 :(得分:1)
是的,假设您需要默认b
强加的sorted()
元素的排序,它应该。
答案 1 :(得分:1)
是的,它有效。
保留一个已排序的集合代替保留list_b并对其进行快速排序将提高效率 - 但当然它可能会降低其他重要事项的效率。
没有其他方法可以提高算法的复杂性 - dict查找是常量时间,迭代列表的速度和迭代任何可能的一样快。
你可以通过避免需要以各种不同方式散列每个(a,b,c)元组来加快速度,但我怀疑这会产生很大的不同。
您可以通过与变量范围相关的各种微优化以及是否产生值或返回生成器,通过一些操作码加快速度,但很难想象这将无关紧要。