如何在键(元组)的第一个元素上对字典进行排序

fly*_*zai 5 python sorting dictionary python-2.7

我有一个字典,其中每个键都是值的元组,我想使用该sorted()方法在元组的第一个元素上对字典进行排序。我的代码如下所示:

def mapData(header_list, dict_obj):
    master_dict = {}
    client_section_list = []
    for element in header_list:
        for row in dict_obj:
            if (row['PEOPLE_ID'], row['DON_DATE']) == element:
                client_section_list.append(row)
        element = list(element)
        element_list = [client_section_list[0]['DEDUCT_AMT'],
                    client_section_list[0]['ND_AMT'],
                    client_section_list[0]['DEDUCT_YTD'],
                    client_section_list[0]['NONDEDUCT_YTD']
                    ]
        try:
            element_list.append((float(client_section_list[0]['DEDUCT_YTD']) +
                                 float(client_section_list[0]['NONDEDUCT_YTD'])
                                 ))
        except ValueError:
            pass

    element.extend(element_list)
    element = tuple(element)
    master_dict[element] = client_section_list
    client_section_list = []
return sorted(master_dict, key=lambda key: key[master_dict[(1)]]
Run Code Online (Sandbox Code Playgroud)

最后一行是我试图找到一种对其进行排序的方法。我的元组看起来像这样:

(312178078,6/22/15,25,0,25,0,25.0)
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 5

不能完全确定您要执行的操作,特别是该函数应该返回的内容。我假设您想返回按键元组中第一个元素排序的字典。

为此,有两件事要注意:

  1. 默认情况下,元组按其第一个元素排序(如果相同,则按第二个元素排序,依此类推),因此不需要特殊的键功能
  2. 常规字典是无序的,即它们不能以任何顺序永久排序;您只能将其项目排序为列表,或使用该列表来创建OrderedDict替代项

一些最小的例子:

>>> d = {(2,4): 1, (1,3): 2, (1,2): 3, (3,1): 4}
>>> sorted(d)
[(1, 2), (1, 3), (2, 4), (3, 1)]
>>> sorted(d.items())
[((1, 2), 3), ((1, 3), 2), ((2, 4), 1), ((3, 1), 4)]
>>> collections.OrderedDict(sorted(d.items()))
OrderedDict([((1, 2), 3), ((1, 3), 2), ((2, 4), 1), ((3, 1), 4)])
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可能希望这样做:

return collections.OrderedDict(sorted(master_dict.items()))
Run Code Online (Sandbox Code Playgroud)