在一个目录中更新多个词典

2024-05-26 04:24:29 发布

您现在位置:Python中文网/ 问答频道 /正文

CLUB_CARDS = range(13)
DIAMONDS_CARDS = range(13, 26)
HEART_CARDS = range(26, 39)
SPADE_CARDS = range(39, 52)
CARDS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"]

def get_cards():
    d = {k: v for k, v in zip(CLUB_CARDS, CARDS)}
    d.update({k: v for k, v in zip(DIAMONDS_CARDS, CARDS)})
    d.update({k: v for k, v in zip(HEART_CARDS, CARDS)})
    d.update({k: v for k, v in zip(SPADE_CARDS, CARDS)})
    return d

如何重构此代码


Tags: inforgetreturndefupdaterangezip
2条回答

这里有一个替代方案:

def get_cards():
  suits = list('CDHS')
  ranks = list('A23456789XJQK')
  return {k: ' of '.join([ranks[k%13], suits[k//13]]) for k in range(52)}

print(get_cards())
# {0: 'A of C', 1: '2 of C', 2: '3 of C', 3: '4 of C', 4: '5 of C', 5: '6 of C', 6: '7 of C', 7: '8 of C', 8: '9 of C', 9: 'X of C', 10: 'J of C', 11: 'Q of C', 12: 'K of C', 13: 'A of D', 14: '2 of D', 15: '3 of D', 16: '4 of D', 17: '5 of D', 18: '6 of D', 19: '7 of D', 20: '8 of D', 21: '9 of D', 22: 'X of D', 23: 'J of D', 24: 'Q of D', 25: 'K of D', 26: 'A of H', 27: '2 of H', 28: '3 of H', 29: '4 of H', 30: '5 of H', 31: '6 of H', 32: '7 of H', 33: '8 of H', 34: '9 of H', 35: 'X of H', 36: 'J of H', 37: 'Q of H', 38: 'K of H', 39: 'A of S', 40: '2 of S', 41: '3 of S', 42: '4 of S', 43: '5 of S', 44: '6 of S', 45: '7 of S', 46: '8 of S', 47: '9 of S', 48: 'X of S', 49: 'J of S', 50: 'Q of S', 51: 'K of S'}

或者反过来说:

def get_cards():
  suits = list('CDHS')
  ranks = list('A23456789XJQK')
  return {13*s+r: ' of '.join([ranks[r], suits[s]]) for s in range(len(suits)) for r in range(len(ranks))}

print(get_cards())
# {0: 'A of C', 1: '2 of C', 2: '3 of C', 3: '4 of C', 4: '5 of C', 5: '6 of C', 6: '7 of C', 7: '8 of C', 8: '9 of C', 9: 'X of C', 10: 'J of C', 11: 'Q of C', 12: 'K of C', 13: 'A of D', 14: '2 of D', 15: '3 of D', 16: '4 of D', 17: '5 of D', 18: '6 of D', 19: '7 of D', 20: '8 of D', 21: '9 of D', 22: 'X of D', 23: 'J of D', 24: 'Q of D', 25: 'K of D', 26: 'A of H', 27: '2 of H', 28: '3 of H', 29: '4 of H', 30: '5 of H', 31: '6 of H', 32: '7 of H', 33: '8 of H', 34: '9 of H', 35: 'X of H', 36: 'J of H', 37: 'Q of H', 38: 'K of H', 39: 'A of S', 40: '2 of S', 41: '3 of S', 42: '4 of S', 43: '5 of S', 44: '6 of S', 45: '7 of S', 46: '8 of S', 47: '9 of S', 48: 'X of S', 49: 'J of S', 50: 'Q of S', 51: 'K of S'}

如果重构的目标是简化此过程,则可以使用^{}在一个范围内循环卡片:

from itertools import cycle

CARDS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"]

def get_cards():
    return {k: v for k,v in zip(range(52), cycle(CARDS))}

get_cards()

返回相同的内容:

{0: 'A',
 1: '2',
 2: '3',
 3: '4',
 4: '5',
 ... 
 48: 'T',
 49: 'J',
 50: 'Q',
 51: 'K'}

不确定您是如何使用它的,但由于键只是有序整数,因此作为一个列表可能更有意义

相关问题 更多 >