Skip to main content
 首页 » 编程设计

python之如何在 Python 中使用排序键函数调用

2025年05月04日13luoye11

我有一个代表扑克牌的字符串列表。排名可以是

A23456789TJQK

这是我的 list

# L2 
['5', '6', '7', 'A', 'K'] 

我正在尝试创建一个函数来调用已排序函数中的键,以按顺序返回卡片等级数值。所以这是我的功能:

def sortYo(): 
   myDict = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'T': 10, 'J': 10, 'Q': 10, 'K': 10} 

这是我的电话:

L4 = sorted(L2, key = sortYo()) 

但我的 L4 结果是一样的:

# L4 
['5', '6', '7', 'A', 'K'] 

为什么我的 sortYo() 函数不更改值?提前谢谢你。

编辑:

from collections import Counter 
from itertools import combinations 
import sys 
 
 
myList = sys.argv 
myList.pop(0) 
Suits = ['H', 'S', 'D', 'C'] 
Nums = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'] 
SuitsTwo = {'♥': 'H', '♦': 'D', '♣': 'C', '♠': 'S'} 
print(myList) 
L1 = [] # Suits 
L2 = [] # Ranks 
L3 = [i for i in myList[0]] # Cut 
for i in myList: 
   for x in i: 
      if x in SuitsTwo: 
         L1.append(SuitsTwo[x]) 
      elif x in Suits: 
         L1.append(x) 
      else: 
         L2.append(x) 
 
print('L1:' 
print(L1) 
print('L2:') 
print(L2) 
print('L3:') 
print(L3) 
score = 0 
# straight 
sC = 0 
myDict = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9\ 
': 9, 'T': 10, 'J': 10, 'Q': 10, 'K': 10} 
 
L4 = sorted(L2, key = lambda x: myDict.get(x,11)) 
print('L4') 
print(L4) 
 
#RUN 
python3 as13.py AS 5H 6C 7S KH 
['AS', '5H', '6C', '7S', 'KH'] 
L1: 
['S', 'H', 'C', 'S', 'H'] 
L2: 
['A', '5', '6', '7', 'K'] 
L3: 
['A', 'S'] 
L4 
['A', '5', '6', '7', 'K'] 
0 

请您参考如下方法:

尝试对排序键使用 lambda 函数:

myDict = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,  
          '9': 9, 'T': 10, 'J': 10, 'Q': 10, 'K': 10} 
 
L4 = sorted(L2, key=lambda x: myDict.get(x, 11)) 

这将按与 myDict 中每个键关联的值排序。它还会将 L2 中不在 myDict 的键中的任何值放置在排序列表的末尾,方法是分配默认值 11 到未知键。

如果您不必担心 L2 中的项不在 myDict 的键中,您还可以使用:

L4 = sorted(L2, key=myDict.get)