在Python中将字符串映射到整数

时间:2017-02-04 05:36:18

标签: python list sorting dictionary mapping

为了构建我的扑克游戏,我将“手”抽象为card个对象的列表 例如,['AC', '3D', '4S', 'KH', 'TC']表示hand个对象,列表中的每个项目都是card个对象。

我想按照它们在游戏中的重要性降序排列牌 即'A' > 'K' > ....(so on)... > '2'

我正在寻找将每张卡的等级映射到相应的值 对于上面的示例,对应关系将为[14, 13, 10, 4, 3]

我有以下功能为我做这件事:

def mapper(ranks):
    mapping = {
            '2': 2,
            '3': 3,
            '4': 4,
            '5': 5,
            '6': 6,
            '7': 7,
            '8': 8,
            '9': 9,
            'T': 10,
            'J': 11,
            'Q': 12,
            'K': 13,
            'A': 14
        }
    new_ranks = [mapping[rank] for rank in ranks]
    return new_ranks

def card_ranks(cards):
    "Return a list of the ranks, sorted with higher first."
    ranks = [r for r,s in cards]
    return sorted(mapper(ranks), reverse=True) 

这些功能运行良好,但我找不到足够的Pythonic 我想知道如何有效地执行此映射(可能使用map函数)。

1 个答案:

答案 0 :(得分:0)

这是我发现更具可读性和Pythonic的方式

def card_ranks(cards):
    "Return a list of the ranks, sorted with higher first."
    ranks = ['--23456789TJQKA'.index(r) for r,s in cards]
    return ranks.sort(reverse=True) 

每当我们想要将一个角色映射到int时,我们都可以使用以下任何一种技术:

  • 将映射定义为dict并使用键值调用此映射。
  • 在String对象上使用index。 (在这种情况下适用)

此外,如果我们想要将大写字符映射到C中对应的整数值,我们可以使用以下内容:

value_of_ch = 'ABCDEFGHIJKLMNOPQRST'.index(ch + 65)