我正在尝试对 2 级嵌套默认字典进行递归排序。我一直无法弄清楚如何正确地做到这一点。我的问题陈述如下:
- 第一级键必须是自然排序。
二级键必须按特定顺序排序。我试图创建一个列表,其索引代表元素的顺序。我的代码片段如下:
import operator import collections trade_group_totals = collections.defaultdict(lambda:collections.defaultdict(float)) trade_group_totals['foo']['ABC'] = 100 trade_group_totals['foo']['XYZ'] = 50 trade_group_totals['bar']['ABC'] = 150 trade_group_totals['bar']['XYZ'] = 250
我的排序索引比较:
trade_groups = ['XYZ', 'ABC']
def TradeGroupSort(trade_group):
return trade_groups.index(trade_group)
def SortTotals(totals, sort_function_one, sort_function_two):
return [
(k1, v1) for k1, v1 in [(k, sorted(v.iteritems(), key=sort_function_two))
for k, v in sorted(totals.iteritems(), key=sort_function_one)]]
我正在调用该函数,如下所示:
SortTotals(
trade_group_totals, operator.itemgetter(0),
sort_function_two=lambda x: operator.methodcaller('TradeGroupSort', x))
我的预期输出应该是:
[('bar', [('XYZ', 50), ('ABC', 100)]), ('foo', [('XYZ', 250), ('ABC', 150)])]
但生成的输出是
[('bar', [('XYZ', 50), ('ABC', 150)]), ('foo', [('ABC', 150), ('XYZ', 250)])]