我有一个基于{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)
答案 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]])
这将为您提供按嵌套词典的键排序的每个月。