最近有一个需要对文本内容进行排序的需求,而文本内容均通过yaml读取,也就是说,需要通过yaml中的键的值对文本进行排序和格式化输出,这里需要一方面要考虑排序,还需要考虑值相同的情况,所以这里简单写了个分类,用来实现根据值来对键进行排序。具体实现如下:
# 根据字典中的v值, 对k进行排序
# 原理:
# 1, 使用两个列表a和b, 分别保存k值和v值
# 2, 使用另外一个列表c, 对v值进行排序
# 3, 从列表c中遍历元素, 获取到元素v后, 先判断v在列表b中的下标, 然后根据下标取列表a的值, 保存到列表d, 同时将b的该下标的值设置为空
# 4, 将列表d返回, 此时的列表d即为根据v值排序顺序, 取得k的排序后的列表
class OrderDict:
def __init__(self, args):
self.args = args
def order(self):
keys = [item for item in self.args] # 获取key值
values = [self.args[item] for item in self.args] # 获取value值
sorted_values = sorted(values) # 对value值进行排序
ret = []
while len(sorted_values):
value = sorted_values.pop(0)
value_index = values.index(value)
values[value_index] = ""
ret.append(keys[value_index])
return ret
data = {"hell": 123, "adsf": 456, "asdfss": 124, "asdjj": 135, "sdd": 135}
a = OrderDict(data)
print(a.order())
# 输出:
['hell', 'asdfss', 'asdjj', 'sdd', 'adsf']