【发布时间】:2012-06-09 19:20:42
【问题描述】:
不知道是否可以在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)] 上返回一个迭代器?如果是这样,有没有更有效的方法(意味着更快的代码)来实现相同的目标?
【问题讨论】:
-
通过“更好”,您是在寻找“更高效”、“更容易理解而不需要 cmets”、“更惯用”还是“更少/更漂亮的代码”?你所拥有的将起作用,而且对我来说似乎并不坏。定义一个仅产生值的 sorted_dict_generator 而不是返回产生值的生成器的 sorted_dict_itr 可能更清晰,但代码更多。保留 b 的排序集合而不是每次排序 list_b 可能(取决于您更大的用例)更有效。还有很多其他这样的 cmets 要做,但不知道更多……
-
@abarnert,感谢 cmets。更好,我主要是指代码的效率。除了您已经提到的“排序集合”之外,在这方面有什么改进吗?
标签: python dictionary