【问题标题】:How do I get random values from nested dictionaries? [duplicate]如何从嵌套字典中获取随机值? [复制]
【发布时间】:2020-01-26 23:01:27
【问题描述】:

所以,我对 Python 还很陌生,现在正在尝试借助一些书籍自学。我目前正在从事一个个人项目,我在其中模拟一手扑克牌。我有一本字典,其中包含代表每种花色的四个嵌套字典,对于每个字典,我都有所有可能出现的卡片。

我尝试寻找获取这些值的方法,但我发现的所有内容要么适用于 Python 2.x,并且不再适用,要么似乎只能深入一本字典。

deck = {
    'Spades': {'Aces': 1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
    'Diamonds': {'Aces': 1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
    'Hearts': {'Aces': 1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
    'Clubs': {'Aces': 1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1}
}

我想创建一个返回随机卡片的函数,我可以从deck变量中获取一个随机值,使用random.choice(list(deck.keys())),但是我无法进入那些字典,我觉得这真的很简单而我只是愚蠢。

【问题讨论】:

  • 你的预期输出是什么?
  • 从deck 中选择一个随机元素,然后从该字典中选择一个随机元素。
  • 你为什么不能进入那些字典?您的表达式将返回一个键,然后您可以对 deck[key].keys() 使用相同的内容。

标签: python dictionary random


【解决方案1】:

我可以使用random.choice(list(deck.keys()))从deck变量中获取一个随机值

你为什么不重复一遍呢?先随机选花色,再随机选牌。

suit = random.choice(list(deck))
value = random.choice(list(deck[suit]))
print(suit, value)

可能会打印例如:

Diamonds Fives

(顺便说一下,将键转换为列表时可以省略.keys()。)

另外,我不知道您是否需要它或这些值的用途,但是您可以使用 deck[suit][value] 之类访问每张卡内部的值

print(deck[suit][value])

哪些打印:

1

【讨论】:

  • 这很快解决了问题,谢谢。我认为这可能很简单,但我对 Python 的语法还不是很熟悉,而且我的解决方案无法正常工作。我正在实施此解决方案,非常感谢您的帮助。
【解决方案2】:

这是你要找的吗?

suit = random.choice(list(deck))
value = random.choice(list(deck[suit]))

例如:

from random import choice

deck = {'Spades': {'Aces':1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
'Diamonds': {'Aces':1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
'Hearts': {'Aces':1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1},
'Clubs': {'Aces':1, 'Twos': 1, 'Threes': 1, 'Fours': 1, 'Fives': 1, 'Sixes': 1, 'Sevens': 1, 'Eights': 1, 'Nines': 1, 'Tens': 1, 'Jacks': 1, 'Queens': 1, 'Kings': 1}}

suit = choice(list(deck))
value = choice(list(deck[suit]))

print(suit, value)

打印:

Clubs Sixes

【讨论】:

    【解决方案3】:

    首先,像现在一样随机选择一套西装。

    suit = random.choice(list(deck.keys()))
    

    然后访问该特定花色的卡片字典,并以相同的方式随机选择卡片。

    random.choice(list(deck[suit].keys()))
    

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多