我如何首先根据它们的单位(bit/s、Kbit/s 等)对特定的字典列表进行排序,然后根据它们的值对它们进行排序

How do I sort the particular list of dictionary first on the basis of their Units (bit/s, Kbit/s, etc) and then sort them according to their value

my_lst = [
        {"usage": "0.59 Kbit/s"},
        {"usage": "383.34 bit/s"},
        {"usage": "158.13 bit/s"},
        {"usage": "4.15 Gbit/s"},
        {"usage": "18.5 Mbit/s"},
        {"usage": "45 Kbit/s"}
    ]

尝试实现的输出应该是这样的,带有排序值:-

my_lst = [
    {'usage': '4.15 Gbit/s'}, 
    {'usage': '18.5 Mbit/s'}, 
    {'usage': '45 Kbit/s'}, 
    {'usage': '0.59 Kbit/s'}, 
    {'usage': '383.34 bit/s'}, 
    {'usage': '158.13 bit/s'}
]

单向使用 humanfriendly.parse_size:

from humanfriendly import parse_size

sorted(my_lst, key=lambda x: parse_size(x["usage"]), reverse=True)

输出:

[{'usage': '4.15 Gbit/s'},
 {'usage': '18.5 Mbit/s'},
 {'usage': '45 Kbit/s'},
 {'usage': '0.59 Kbit/s'},
 {'usage': '383.34 bit/s'},
 {'usage': '158.13 bit/s'}]

您可以使用 humanfriendly 模块:

from humanfriendly import parse_size
print(sorted(my_lst, key=lambda x: parse_size(x["usage"])[::-1])

使用 humanfriendly 库的其他答案是更好的解决方案。这里只是一个不使用库的替代方案。

from decimal import Decimal

UNIT_MAPPINGS = {
    "": 1,
    "K": pow(10, 3),
    "M": pow(10, 6),
    "G": pow(10, 9),
}

my_lst = [
    {"usage": "0.59 Kbit/s"},
    {"usage": "383.34 bit/s"},
    {"usage": "158.13 bit/s"},
    {"usage": "4.15 Gbit/s"},
    {"usage": "18.5 Mbit/s"},
    {"usage": "45 Kbit/s"}
]

def convert_rate(rate):
    num, _, unit = rate['usage'].partition(" ")
    unit = unit.replace('bit/s', '')
    return Decimal(num) * UNIT_MAPPINGS[unit]

my_lst.sort(key=convert_rate, reverse=True)
print(my_lst)

输出

[{'usage': '4.15 Gbit/s'}, {'usage': '18.5 Mbit/s'}, {'usage': '45 Kbit/s'}, {'usage': '0.59 Kbit/s'}, {'usage': '383.34 bit/s'}, {'usage': '158.13 bit/s'}]