使用Python对基于值的字典进行排序

时间:2015-03-09 13:48:53

标签: python sorting dictionary

我有一个词典:

self.currentMsg={'Decimal Label value':'','SDI value':'','Label format':''}

for i in range (self.firstRowIdx, self.lastRowIdx) :
        self.currentMsg['Decimal Label value']=self.xlManager.getCellValue(i,LABEL_COL_IDX)


self.currentMsg['SDI value']= SDIValue=self.xlManager.getCellValue(i,SDI_COL_IDX)
        self.currentMsg['Label format']=LabelFormat=self.xlManager.getCellValue(i,FORMAT_COL_IDX)
 sorted_x = sorted(self.currentMsg.items(),key=operator.itemgetter('Decimal Label value'))
        print(sorted_x) 

我想根据'十进制标签值'的增加值对dict进行排序。

我试过这个:

sorted_x = sorted(self.currentMsg.items(), key=itemgetter(''Decimal Label value''))

但我收到此错误

TypeError: tuple indices must be integers, not str

然后我尝试了这个:

sorted_x = sorted(self.currentMsg.items(), key=itemgetter('0'))

但是dict仍未排序。 控制台显示:

[('Decimal Label value', 324.0), ('Label format', 'BNR'), ('SDI value', 'XX')]
[('Decimal Label value', 331.0), ('Label format', 'BNR'), ('SDI value', 'XX')]

[('Decimal Label value', 312.0), ('Label format', 'BNR'), ('SDI value', 'XX')]

1 个答案:

答案 0 :(得分:1)

看起来你可能有一个列表的dicts,而不是一个 dict。

因此,请尝试:

sorted_x = sorted(self.currentMsg, 
    key=operator.itemgetter('Decimal Label value')) 

第二个想法,因为你使用的是self.currentMsg.items()并且它没有引发AttributeError,所以看起来self.currentMsg可能是一个字典。 然后self.currentMsg.items()将是键/值对的元组。这与你的第一个陈述相矛盾,因为它只显示了3个序列的序列。

为了更好地回答您的问题,我们需要了解self.currentMsg的真实情况。