我是python的新手。我正在尝试解决一个问题。让我们假设我得到一个带有标识符的日志文件,后跟空格分隔的单词。我需要根据单词对日志进行排序(标识符可以省略)。但是,如果单词匹配,我需要根据标识符进行排序。所以我正在构建一个字典,标识符是键,单词是值。为简单起见,我在下面使用示例。如何按值对字典进行排序,然后在值匹配时按键排序?以下是一个例子。
>>> a_dict = {'aa1':'n','ba2' : 'a','aa2':'a'}
>>> a_dict
{'ba2': 'a', 'aa1': 'n', 'aa2': 'a'}
如果我按值对给定的字典进行排序,它就变成了这个。
>>> b_tuple = sorted(a_dict.items(),key = lambda x: x[1])
>>> b_tuple
[('ba2', 'a'), ('aa2', 'a'), ('aa1', 'n')]
然而,预期的输出应该如下所示
[('aa2','a'),('ba2','a'),('aa1','n')]
原因是如果值相同,则必须按键对字典进行排序。有关如何做到这一点的任何建议?
答案 0 :(得分:4)
您的示例中的key
函数只会按值排序,因为您已经注意到了。如果您还想按键排序,那么您可以将值和键(按此顺序)作为元组返回:
>>> sorted(a_dict.items(), key=lambda x: (x[1], x[0]))
[('aa2', 'a'), ('ba2', 'a'), ('aa1', 'n')]
令人困惑的部分是,您的数据看起来像('aa2', 'a')
,但由于('a', 'aa2')
而被排序为(x[1], x[0])
。
答案 1 :(得分:2)
您可以使用集合模块中的OrderedDict来存储已排序的值
imagecreatefromjpeg
编辑:我在(t [0],t [1])中混合了键和值。在键功能t [0]中给出键,t [1]给出值。已排序的函数将使用元组(值,键)并按字母数字顺序排序。