簡體   English   中英

如何在鍵的第一個元素(元組)上對字典進行排序

[英]How to sort dictionary on first element of the key (tuple)

我有一個字典,每個鍵都是一個值元組,我想使用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)]]

最后一行是我試圖找到一種方法來排序它。 我的元組看起來像這樣:

(312178078,6/22/15,25,0,25,0,25.0)

不完全確定你要做什么,特別是那個函數應該返回什么。 我假設您要返回按鍵元組中的第一個元素排序的字典。

為此,有兩點需要注意:

  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)])

在您的情況下,您可能想要這樣:

return collections.OrderedDict(sorted(master_dict.items()))

正如@tobias_k所提到的那樣, sorted元素排序對元組sorted排序,優先級降低,例如,如果你取一個元組(a, b, c) ,最高的排序優先級轉到a ,然后轉到b等(默認sorted使用對象的比較方法和這是tuple比較的工作方式)。 如果你想要一個排序鍵列表,那么你需要sorted(master_dict) ,但我相信你真的想留下這些值

sorted(master_dict.items(), key=lambda key: key[0])

dict.items返回表單(key, value)元組,所以在這里你需要指定排序key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM