Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序嵌套字典Python,lambda不工作?_Python_Sorting - Fatal编程技术网

排序嵌套字典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]
:)