排序嵌套字典Python,lambda无效?

时间:2014-04-03 05:00:09

标签: 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, 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月的8月最高值... 9月9日的最高值...依此类推

我尝试在许多StackOverflow问题中使用lambda,但它还没有奏效。我收到了一个Key错误。

newlist9= sorted(aid2tagM.items(),key=lambda x: x[0][1], reverse=True)

2 个答案:

答案 0 :(得分:1)

对于您提供的输入,

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

答案 1 :(得分: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]])

这将为您提供按嵌套词典的键排序的每个月。