Создание словаря на основе рангов
Я создаю упрощенную программу Техасского Холдема и пытаюсь создать функцию, которая создает словарь на основе рангов карт.
Например, если у меня есть:
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)
было бы достаточно.