首页 > 解决方案 > 在一个字典中更新多个字典

问题描述

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

如何重构这段代码?

标签: pythonpython-3.xalgorithm

解决方案


如果重构的目标是简化这一点,您可以使用itertools.cycle()在一个范围内循环卡片:

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'}

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


推荐阅读