Python 3.x 对文本文档进行排序python 3

Python 3.x 对文本文档进行排序python 3,python-3.x,Python 3.x,这是文本文档:第一个字符串是金属的类型,第二个是金属条的数量,第三个是重量,第四个是值 Gold 1 5 750 Silver 1 1 400 Rhodium 1 4 500 Platinum 1 6 1000 我必须使用插入排序按值对列表进行排序。这是我到目前为止所拥有的 def sortMetalsByValuePerBar(metals): for i in range(1,len(metals)): j = i while j > 0

这是文本文档:第一个字符串是金属的类型,第二个是金属条的数量,第三个是重量,第四个是值

Gold 1 5 750

Silver 1 1 400

Rhodium 1 4 500

Platinum 1 6 1000
我必须使用插入排序按值对列表进行排序。这是我到目前为止所拥有的

def sortMetalsByValuePerBar(metals):
    for i in range(1,len(metals)):
        j = i
        while j > 0 and metals[j-1] > metals[j]:
            metals[j - 1], metals[j] = metals[j], metals[j - 1]
            j -= 1
    return metals

这是否正确?

尝试从这个解决方案中学习

data="""
Gold 1 5 750
Silver 1 1 400
Rhodium 1 4 500
Platinum 1 6 1000
"""

data = filter(None, data.splitlines())
data = [l.split() for l in data]
data = [ (l[0], int(l[1]), int(l[2]), int(l[3])) for l in data ]

def insertion_sort(l, keyfunc=lambda i:i):
    for i in range(1, len(l)):
        j = i-1
        key = l[i]
        while keyfunc(l[j]) > keyfunc(key) and (j >= 0):
            l[j+1] = l[j]
            j -= 1
        l[j+1] = key

insertion_sort(data, keyfunc=lambda l: l[3])

for l in data:
    print(l)

# Output:
# ('Silver', 1, 1, 400)
# ('Rhodium', 1, 4, 500)
# ('Gold', 1, 5, 750)
# ('Platinum', 1, 6, 1000)

如果答案对你有用,记得竖起大拇指。。