根据排名构建字典

时间:2014-04-07 11:48:14

标签: python dictionary poker

我正在创建一个德州扑克的简化程序,我正在尝试创建一个基于卡片级别构建字典的函数。

例如,如果我有:

H1: [6c, 2c, 6d, 6h, 2h, 6s, 3s]
H2: [6c, 2c, 6d, 6h, 2h, 3s, Ad]

我希望得到一些看起来像的东西: 当我为{2: [2c, 2h], 3: [3s], 6: [6c, 6d, 6h, 6s]}调用我的函数时H1 所以我想拿7张牌并根据排名建立一本字典。在这种情况下,我正在寻找四种类型。

1 个答案:

答案 0 :(得分:3)

In [51]: import operator

In [52]: import itertools as IT

In [53]: H1 =  ['6c', '2c', '6d', '6h', '2h', '6s', '3s']

In [54]: {rank:list(group) for rank, group in IT.groupby(sorted(H1), key=operator.itemgetter(slice(None, -1)))}
Out[54]: {'2': ['2c', '2h'], '3': ['3s'], '6': ['6c', '6d', '6h', '6s']}

In [65]: {rank:list(group) for rank, group in IT.groupby(sorted(H1), key=lambda card: card[:-1])}
Out[65]: {'2': ['2c', '2h'], '3': ['3s'], '6': ['6c', '6d', '6h', '6s']}

请注意,如果十个俱乐部由'10c'代表,那么要剥离等级,您需要operator.itemgetter(slice(None, -1))。另一方面,如果您使用'tc'代表十个俱乐部,那么operator.itemgetter(0)就足够了。