排序嵌套字典Python,lambda不工作?
我有一个字典字典,它是基于如下的排序嵌套字典Python,lambda不工作?,python,sorting,Python,Sorting,我有一个字典字典,它是基于如下的{month:{id:value,id:value},month:{id:value,id:value} {9: {10: 1, 4113: 1, 533: 2, 4124: 2, 31: 1, 7713: 1, 12038: 1, 550: 3, 10794: 1, 15922: 1, 4671: 1, 65: 2, 4681: 1, 8789: 1, 1622: 1, 1116: 2, 605: 2, 8992: 1, 614: 2, 1639: 2, 175
{month:{id:value,id:value},month:{id:value,id:value}
{9: {10: 1, 4113: 1, 533: 2, 4124: 2, 31: 1, 7713: 1, 12038: 1, 550: 3, 10794: 1, 15922: 1, 4671: 1, 65: 2, 4681: 1, 8789: 1, 1622: 1, 1116: 2, 605: 2, 8992: 1, 614: 2, 1639: 2, 17515: 1, 4883: 1}, 8: {4103: 1, 12298: 2, 19: 1, 4126: 1, 32: 2, 4129: 3, 6180: 1, 6192: 1, 51: 5, 52: 1, 53: 1, 58: 1}...etc
我正在尝试对值进行排序,这样我就可以打印每个月的最高值,比如8月份的最高值。。。9月(9日)9月的最高值。。等等
我试着在这个问题上的许多StackOverflow问题中使用lambda,但都不起作用。我得到一个关键错误
newlist9= sorted(aid2tagM.items(),key=lambda x: x[0][1], reverse=True)
对于您提供的输入
[(month, sorted(data.items(), key=lambda x:-x[1])) for month, data in d.items()]
产生
[(8,
[(51, 5),
(4129, 3),
(12298, 2),
(32, 2),
(4103, 1),
(19, 1),
(4126, 1),
(6180, 1),
(6192, 1),
(52, 1),
(53, 1),
(58, 1)]),
(9,
[(550, 3),
(533, 2),
(4124, 2),
(65, 2),
(1116, 2),
(605, 2),
(614, 2),
(1639, 2),
(12038, 1),
(10, 1),
(4113, 1),
(4883, 1),
(31, 1),
(8992, 1),
(7713, 1),
(10794, 1),
(15922, 1),
(4671, 1),
(4681, 1),
(8789, 1),
(1622, 1),
(17515, 1)])]
看起来您可能将字典视为lambda表达式中的列表。术语
lambda x:x[0][1]
看起来像一个二维列表索引。但是,您的数据结构是嵌套字典。因此,除非每个顶级字典(假设它是一年中的一个月)都有一个键0的保证条目,并且每个子级字典都有一个键1的保证条目,否则它将给您一个键错误。建议尝试:
for month in range(1,12+1):
month_to_sort = aid2tagM[month]
month_keys = month_to_sort.keys()
month_keys.sort(reverse=True)
monthly_data_sorted_by_key = []
for month_key in month_keys:
print month,month_key,aid2tag[month][month_key]
monthly_data_sorted_by_key.append([month_key,aid2tag[month][month_key]])
这将给您每个月按嵌套字典的键排序。为什么您的键函数是
lambda x:x[0][1]
?我不知道,这正是我在研究其他类似词典的问题时所尝试的mine@user2601122预期的输出是什么?在继续之前,请先阅读和。@user2601122为什么不通过输入的简短版本向我们显示预期的输出,只是为了清楚…@user2601122这是一个小技巧;)如果要按降序对数字进行排序,而不是使用reverse=True
,只需对值求反即可。因此,在比较过程中,最高的数字将变成最小的数字。例如,如果您有[2,1,3]
,在比较期间,这些值将被视为[-2,-1,-3]
。现在,如果按升序对值进行排序,值将变成[3,2,1]
:)