python根据字典的值对键进行排序的一种实现

最近有一个需要对文本内容进行排序的需求,而文本内容均通过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']

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值