2010-10-04 36 views
0

我有以下的解释:
{2009: [12, 11, 10, 9], 2010: [1]}的关键逆转字典不起作用

我想反向排序,因此,2010年是第一位的。这里的代码:

def dictSort(dict): 
    items = dict.items() 
    items.sort(reverse=True) 
    dict = {} 
    for item in items: 
     dict[item[0]] = item[1] 
    return dict 

但作为回报,我得到了相同的字典。在for循环之前,一切看起来都很好。这是为什么 ?

回答

2

一本字典是无序的,无论你放入它什么都不按照你添加它的顺序存储。

如果你想要做的东西给它按排序顺序,你可以这样做:

items = dict.items.sort(reverse=True) 
for item in items: 
    doSomething(item,mydict[item]) 

for key,value in iter(sorted(mydict.iteritems(),reverse=True)) 
    doSomething(key,value) 
+0

dict.items是一个函数,而不是一个属性;(顺便说一句,请不要使用字典的变量名!)排序就地工作,所以你不能分配它的输出(这是None)。也许在排序(mydict.items())中的项目:... – tokland 2010-10-04 18:33:23

0

字典没有一个订单。如果您尝试以特定顺序输出词典,请尝试抓取所有键,对它们进行排序,然后使用该列表来知道输出内容的顺序。

0

在这里,人们产生关键的反转顺序字典的项目方式:

def dict_sort(thisdict, reverse=True): 
    return ((key, thisdict[key]) for key in sorted(thisdict, reverse=reverse)) 

mydict = {2009: [12, 11, 10, 9], 2010: [1]} 
for i in dict_sort(mydict): 
    print "%i: %s" % i