Python:解析以下内容的最佳方法

时间:2016-01-09 01:46:52

标签: python poker

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

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

手后的数字表示0-100%的重量。然后我把它转换成字典,我可以读取手的重量。问题是如果双手的重量相同,我将AKs和AKo混合成AK的数据。所以我需要一些方法将AK:1变成AKs:1和AKo:1并摆脱AK:1

现在我的代码只涉及手而不是权重:

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变成AK,AKo,但是当我将它附加到列表时,它会被添加为一个项而不是两个单独的项。它还将原始手留在列表中。

  1. 如何在追加到列表时将其拆分为两个单独的项目?
  2. 最有效的方法是摆脱原来的手?
  3. 我从文本或csv文件导入信息,将其转换为列表或字典,使事情变得更容易?任何其他想法都赞赏。

1 个答案:

答案 0 :(得分:1)

您使用的是Python3吗?实现这项工作的最小变化可能是:

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

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

for parsed_hand in parse_preflop_hand(unparsed_hand):
    ...

我的整个代码可能是:

# 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))