关于扑克:Python:解析以下内容的最佳方法

Python: Best way to parse the following

我有一串扑克手,看起来像这样:

AA:1,KK:1,AK:1,AQ:0.5,AJS:1,ATS:1,…

手后的数字代表0-100%的重量。然后我把它转换成一本字典,我可以读到手的重量。问题是,如果两只手的重量相同,我会把AK和AKO块数据转换成AK。所以我需要一些方法把AK:1变成AKS:1和AKO:1,然后去掉AK:1

现在我有了处理手而不是重量的代码:

1
2
3
4
5
6
def parse_preflop_hand(hand):
if len(hand) < 3 and hand[0] != hand[1]:  #this avoids pairs like AA and hands like AKs
    new_hand = hand + 's' + ', ' + hand + 'o'
else:
    new_hand = hand
return new_hand

这将把AK变成AKS,AKO,但是当我把它附加到一个列表中时,它会被添加为一个项目而不是两个单独的项目。它还将原始手留在列表中。

百万千克1在附加到列表时,如何将其拆分为两个单独的项?百万千克1百万千克1最有效的方法是什么?百万千克1百万千克1我从文本或csv文件中导入信息,是否立即将其转换为列表或字典,使事情变得更简单?任何其他想法都值得赞赏。百万千克1


你在用Python3吗?要使其发挥作用,最微小的变化可能是:

1
2
3
4
5
6
def parse_preflop_hand(hand):
    if len(hand) < 3 and hand[0] != hand[1]:
        parsed_hand = [hand + 's', hand + 'o']
    else:
        parsed_hand = [hand]
    yield from parsed_hand

然后在主代码中,您将执行以下操作:

1
2
for parsed_hand in parse_preflop_hand(unparsed_hand):
    ...

对我来说,整个代码可能是:

1
2
3
4
5
6
7
8
9
10
11
# note this is different from the minimal change above
def parse_preflop_hand(hand, value):
    if len(hand) < 3 and hand[0] != hand[1]:
        return {hand + 's': value, hand+'o': value}
    else:
        return {hand: value}

final_dict = {}
for token in handstring.split(','):
    for unparsed_hand, value in token.split(":"):
        final_dict.update(parse_preflop_hand(unparsed_hand))