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