按字典顺序对日志进行排序的 pythonic 方法
pythonic way of sorting a log lexicographically
我是 python 的新手。我正在尝试解决一个 problem.Lets 假设我得到一个带有标识符后跟 space 分隔词的日志文件。我需要根据单词对日志进行排序(标识符可以省略)。但是,如果单词匹配,我需要根据标识符进行排序。所以我正在构建一个字典,其中标识符是键,单词是值。为简单起见,我使用下面的示例。如果值匹配,如何按值对字典进行排序,然后按键排序?下面是一个例子。
>>> 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')]
原因是如果值相同,则字典必须按键排序。关于如何做到这一点有什么建议吗?
您可以使用集合模块中的 OrderedDict 来存储排序后的值
from collections import OrderedDict
a_dict = {'aa1':'n','ba2' : 'a','aa2':'a'}
sorted_by_key_then_value = sorted(a_dict.items(), key=lambda t: (t[1], t[0])))
sort_dict = OrderedDict(sorted_by_key_then_value)
编辑:我在 (t[0], t[1]) 中混淆了键和值。在键函数中,t[0] 给出键,t[1] 给出值。 sorted 函数将使用 tuple(value, key) 并按字母数字顺序对它们进行排序。
如您所见,示例中的 key
函数仅按值排序。如果您还想按键排序,那么您可以 return 值和键(按该顺序)作为元组:
>>> sorted(a_dict.items(), key=lambda x: (x[1], x[0]))
[('aa2', 'a'), ('ba2', 'a'), ('aa1', 'n')]
例如,令人困惑的部分是您的数据看起来像 ('aa2', 'a')
,但由于 (x[1], x[0])
.
而被排序为 ('a', 'aa2')
我是 python 的新手。我正在尝试解决一个 problem.Lets 假设我得到一个带有标识符后跟 space 分隔词的日志文件。我需要根据单词对日志进行排序(标识符可以省略)。但是,如果单词匹配,我需要根据标识符进行排序。所以我正在构建一个字典,其中标识符是键,单词是值。为简单起见,我使用下面的示例。如果值匹配,如何按值对字典进行排序,然后按键排序?下面是一个例子。
>>> 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')]
原因是如果值相同,则字典必须按键排序。关于如何做到这一点有什么建议吗?
您可以使用集合模块中的 OrderedDict 来存储排序后的值
from collections import OrderedDict
a_dict = {'aa1':'n','ba2' : 'a','aa2':'a'}
sorted_by_key_then_value = sorted(a_dict.items(), key=lambda t: (t[1], t[0])))
sort_dict = OrderedDict(sorted_by_key_then_value)
编辑:我在 (t[0], t[1]) 中混淆了键和值。在键函数中,t[0] 给出键,t[1] 给出值。 sorted 函数将使用 tuple(value, key) 并按字母数字顺序对它们进行排序。
如您所见,示例中的 key
函数仅按值排序。如果您还想按键排序,那么您可以 return 值和键(按该顺序)作为元组:
>>> sorted(a_dict.items(), key=lambda x: (x[1], x[0]))
[('aa2', 'a'), ('ba2', 'a'), ('aa1', 'n')]
例如,令人困惑的部分是您的数据看起来像 ('aa2', 'a')
,但由于 (x[1], x[0])
.
('a', 'aa2')