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视为一个单元.
有人可以解释为什么会这样吗?
非常感谢!
你按字典顺序对它们进行排序,如字符串而不是数字.您可以先将它们转换为整数,也可以扩展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方法作为关键功能来指导排序而不更改正在排序的值.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |