使用字典和后续.sort()命令更正列表会显示错误的字符串顺序

Art*_*nnt 2 python dictionary for-loop list python-3.x

抱歉糟糕的头衔.我是编程新手,我无法想出更好的描述.

所以,我有这个代码:

umw = {'T':10, 'J':11, 'Q':12, 'K':13, 'A':14}

def card_ranks(ranks):
    "Return a list of the ranks, sorted with higher first."
    for i in ranks:
        if i in umw:
            index = ranks.index(i)
            ranks[index] = str(umw[i])

    ranks.sort(reverse = True)
    return ranks

print(card_ranks(['A', '3', '4', 'K'])) #should output [14, 13, 4, 3]
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

['4', '3', '14', '13']
Run Code Online (Sandbox Code Playgroud)

清除"reverse = True"给出以下内容:

['13', '14', '3', '4']
Run Code Online (Sandbox Code Playgroud)

如果我做那样的事情:

r = card_ranks(['A', '3', '4', 'K'])
r[0] -> gives me '4'
but this doesnt work again:
print(sorted(r)) -> gives me ['4', '3', '14', '13'] all over again.
Run Code Online (Sandbox Code Playgroud)

看来,.sort()命令将13和14视为一个单元,将3和4视为一个单元.

有人可以解释为什么会这样吗?

非常感谢!

Pat*_*ugh 6

你按字典顺序对它们进行排序,如字符串而不是数字.您可以先将它们转换为整数,也可以扩展umw字典:

umw = {str(i): i for i in range(2, 10)}
umw.update({'T':10, 'J':11, 'Q':12, 'K':13, 'A':14})

def card_ranks(ranks):
    return sorted(ranks, key=umw.get, reverse=True)

card_ranks(['A', '3', '4', 'K'])
# ['A', 'K', '4', '3']
Run Code Online (Sandbox Code Playgroud)

这使用该dict.get方法作为关键功能来指导排序而不更改正在排序的值.