我有一个字典,其中每个键都是一个值元组,我想使用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)
答案 0 :(得分:3)
不完全确定你要做什么,特别是那个函数应该返回什么。我假设你想要返回按键元组中第一个元素排序的字典。
为此,有两点需要注意:
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()))
答案 1 :(得分:2)
正如@tobias_k所提到的,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
。