代码之家  ›  专栏  ›  技术社区  ›  Coder117

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

  •  1
  • Coder117  · 技术社区  · 7 年前

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

    A23456789TJQK公司

    这是我的单子

    # 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
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Olivier Melançon iacob    7 年前

    尝试对排序键使用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 那不在钥匙里 米迪特 在排序列表的末尾,通过指定默认值 11 到未知密钥。

    如果你不必担心 L2 不在钥匙里的 米迪特 ,您还可以使用:

    L4 = sorted(L2, key=myDict.get)
    
        2
  •  3
  •   Ignacio Vazquez-Abrams    7 年前
    sorted(..., key='A23...JQK'.index)