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

标签 python python-3.x list dictionary for-loop

抱歉标题不好。我是编程新手,想不出更好的描述。

所以,我有这段代码:

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]

这给了我以下结果:

['4', '3', '14', '13']

清除“reverse = True”会得到以下结果:

['13', '14', '3', '4']

如果我这样做:

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.

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

有人能解释一下这是为什么吗?

非常感谢!

最佳答案

您正在按字典顺序对它们进行排序,作为字符串而不是数字。您可以先将它们转换为整数,或者您可以扩展您的 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']

这使用了 dict.get方法作为 key function在不更改排序值的情况下指导排序。

关于python - 使用字典和后续 .sort() 命令更正列表会显示错误的字符串顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289874/

相关文章:

python - Traceback 后如何检查变量?

python - 在 python 中调用 bsub 函数时将参数传递给 bash 脚本

python-3.x - Geoalchemy2 在给定坐标内查找一定距离内的位置

java - 使用RxJava观察List "add"和 "remove" Action

python - 在 Python 中将具有 1 个变量的列表转换为 float

python - Selenium 未向输入字段发送波浪字符 (~)

python - 给定以下约束,如何将一些数字连接到另一个数字?

python - 如何在 Tkinter Canvas 中的一条线上重绘

python - 检查点击是否在图形形状(圆形)内

Python "join"位于字符串两侧?