【问题标题】:joining two lists of different sizes to create a new dictionary in python加入两个不同大小的列表以在 python 中创建一个新字典
【发布时间】:2020-03-05 03:14:36
【问题描述】:

我正在尝试使用符号及其值递归地制作一副卡片,并且我可以创建代码以使一个通过迭代,但它没有更新以创建所有 52 张卡片。 我尝试使用不同的更新方法,但由于我的编码错误,它们无法正常工作。

test_values = ["♠", "♣", "♥", "♦"]
test_keys = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']


# Printing original keys-value lists
print ("Original key list is : " + str(test_keys))
print ("Original value list is : " + str(test_values))


new_dict = {}

for key in test_keys:
    for value in test_values:
        res[key] = value
        new_dict = {**new_dict, **res}

# Printing resultant dictionary
print ("Resultant dictionary is : " +  str(res))
print(new_dict)

输出:

{'A': '♦', '2': '♦', '3': '♦', '4': '♦', '5': '♦', '6': '♦', '7': '♦', '8': '♦', '9': '♦', '10': '♦', 'J': '♦', 'Q': '♦', 'K': '♦'}

为什么只创建最后一套?

【问题讨论】:

  • 期待的结果是什么?字典键必须是唯一的……这本字典到底应该用来做什么?请注意,您的示例并不完整,因为 res 没有在任何地方定义
  • 是的,我忘记了上面的res = {} 声明。我的错。该词典用于我正在制作的二十一点游戏。

标签: python dictionary recursion set


【解决方案1】:

您可能想要创建所有卡片的列表,而不是字典。这是一种创建元组列表的方法:

test_values = ["♠", "♣", "♥", "♦"]
test_keys = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

# Printing original keys-value lists
print ("Original key list is : " + str(test_keys))
print ("Original value list is : " + str(test_values))

cards = []

for key in test_keys:
    for value in test_values:
        cards.append(key + value)

# Printing resultant list
print(cards)

这给出了输出:

['A♠', 'A♣', 'A♥', 'A♦', '2♠', '2♣', '2♥', '2♦', '3♠', '3♣', '3♥', '3♦', '4♠', '4♣', '4♥', '4♦', '5♠', '5♣', '5♥', '5♦', '6♠', '6♣', '6♥', '6♦', '7♠', '7♣', '7♥', '7♦', '8♠', '8♣', '8♥', '8♦', '9♠', '9♣', '9♥', '9♦', '10♠', '10♣', '10♥', '10♦', 'J♠', 'J♣', 'J♥', 'J♦', 'Q♠', 'Q♣', 'Q♥', 'Q♦', 'K♠', 'K♣', 'K♥', 'K♦']

在您的解决方案中的字典中仅创建最后一套西装的原因是字典键只能保存一个值。当您映射 A → ♠ 时,这将创建字典 {'A': '♠'}。当您随后映射 A → ♣ 时,这会覆盖 'A' 的初始值,将字典更改为 {'A': '♣'}

【讨论】:

  • 谢谢。我忘记了字典是这样制作的。我通过组合花色+值来创建上面的卡片,但是如果我希望能够添加值,例如我正在制作的二十一点游戏。我必须去掉花色符号,同时确保将值 '10' 分配给面卡,以及 '1' 或 '11' 取决于用户的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多