Создание словаря на основе рангов

Я создаю упрощенную программу Техасского Холдема и пытаюсь создать функцию, которая создает словарь на основе рангов карт.

Например, если у меня есть:

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 ответ

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) было бы достаточно.

Другие вопросы по тегам