python中怎么随机从字典中取值,从Python中的字典获取随机值

如何从字典中获得随机对?我正在用黑色插孔制作游戏,因此用户可以从

中获得随机对

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

它将被存储在字典中

player_deck = {}

我该怎么做?

记住player_deck需要是字典

player_card = [] player_card += random.choice(dict(d.items()) print player_card

但它在列表中有效

如何在python词典中获取随机值的可能重复项

只是想指出,在黑色插孔中," A"并不总是11。希望以后您的程序能够解决这个问题。另外,似乎根本不需要构建此字典,您可以在其中简单地deck='23456789TJQKA'选择一个随机字符并稍后处理值

我也想到了这一点,但后来分配值将太多,如果,否则我想为什么不使用字典

是的,A的值取决于玩家@OferSadan,我想当它大于21时,我会将A的值替换为1

使用random.choice()

import random

player_deck = {}

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

key, value = random.choice(list(deck_of_cards.items()))

player_deck[key] = value

或者如果您想直接将键和值放入字典中,则可以这样做

player_deck = dict([random.choice(list(deck_of_cards.items()))])

它不存储在字典中

@mvrht只需将键和值添加到字典中

只是dict([random.choice(list(deck_of_cards.items())])应该创建一个字典

@ Jean-Fran?oisFabre:SyntaxError,缺少一个)。不过,OP的数据结构无法帮助Blackjack。

@ Jean-Fran?oisFabre谢谢,我相应地更新了我的答案

目前尚不清楚您要如何使用此字典模拟卡片组。

如果您多次使用random.choice,则可能会两次获得同一张卡,这很可能不会发生。

您可以创建一个整个牌组(作为列表,而不是作为一个字典),shuffle,绘制一张牌(将其从牌组中删除),然后检查其值。

用namedtuple定义一个新的Card类并不难,并且以后使用它会更容易(感谢@MaartenFabr ??的评论):

# encoding: utf-8

import random

from collections import namedtuple

class Card(namedtuple('Card', ['face', 'color'])):

colors = ['a?', 'a?¥', 'a?|', 'a?£']

faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

values = dict(zip(faces, [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]))

def __repr__(self):

return self.face + self.color

def value(self):

return Card.values[self.face]

@staticmethod

def all():

return [Card(face, color)

for color in Card.colors for face in Card.faces]

deck = Card.all()

print(deck)

# ['Aa?', '2a?', '3a?', '4a?', '5a?', '6a?', '7a?', '8a?', '9a?', '10a?', 'Ja?', 'Qa?', 'Ka?', 'Aa?¥', '2a?¥', '3a?¥', '4a?¥', '5a?¥', '6a?¥', '7a?¥', '8a?¥', '9a?¥', '10a?¥', 'Ja?¥', 'Qa?¥', 'Ka?¥', 'Aa?|', '2a?|', '3a?|', '4a?|', '5a?|', '6a?|', '7a?|', '8a?|', '9a?|', '10a?|', 'Ja?|', 'Qa?|', 'Ka?|', 'Aa?£', '2a?£', '3a?£', '4a?£', '5a?£', '6a?£', '7a?£', '8a?£', '9a?£', '10a?£', 'Ja?£', 'Qa?£', 'Ka?£']

random.shuffle(deck)

print(deck)

# ['9a?£', '4a?', 'Ja?¥', '9a?|', '10a?', 'Ka?£', '8a?¥', '3a?£', 'Ja?£', '10a?|', '8a?|', 'Aa?£', '7a?|', '3a?', '7a?', 'Qa?£', '7a?¥', 'Qa?|', 'Aa?|', '9a?¥', '2a?', '7a?£', '6a?|', '4a?£', 'Qa?', '3a?¥', 'Ka?', '6a?£', '5a?|', '4a?¥', '5a?£', '2a?£', '2a?¥', '6a?¥', '8a?', '2a?|', '4a?|', '8a?£', 'Ka?|', '10a?¥', 'Ka?¥', '5a?', 'Ja?|', '5a?¥', 'Aa?¥', '9a?', '6a?', 'Qa?¥', '10a?£', 'Aa?', '3a?|', 'Ja?']

a_card = deck.pop()

print(a_card)

# Ja?

print(a_card.face)

# J

print(a_card.color)

# a?

print(a_card.value())

# 10

\\'dict \\'对象不可调用

在第values = dict(zip(faces, [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]))行上

@mvrht:是的,我使用的数据类型与您的问题不同。在我看来,套牌不应该是dict。

应该是什么?

@mvrht:牌组可能是包含52张卡的列表。您可以像在甲板上一样,随机播放列表并绘制第一张牌。您可以保留命令以获取每张卡的值。

TypeError Traceback (most recent call last) in () 1 colors = ['spades', 'hearts', 'diamonds', 'clubs'] 2 faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] ----> 3 values = dict(zip(faces, [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10])) 4 deck = [face + ' of ' + color for color in colors for face in faces] 5 TypeError: 'dict' object is not callable

@mvrht:啊。您是否使用名为dict的变量覆盖了功能dict()?这就是您不应该这样做的原因之一;)

您能否详细说明这一行values = dict(zip(faces, [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]))

这行color for color in colors for face in faces

@mvrht:我们有一个包含13个元素的列表和一个包含4个元素的列表。双列表理解将创建一个包含52个元素的列表,其中一个列表中的每个元素都与另一列表中的每个元素混合在一起。它等效于两个嵌套的for循环。

dict(zip(faces, [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]))只是从键列表和值列表中重新创建字典。

谢谢哥们 !你是救命的人

代替deck = [face + ' of ' + color for color in colors for face in faces],我将执行deck = list(itertools.product(colors, faces))以获得元组列表。您可以如何在另一个级别上表示" \\ x y "或" y",但是以后您可以更轻松地检查颜色或面部。单独的类(或namedTuple)甚至更容易

@MaartenFabré:我试图对您的评论进行整数化。欢迎提出任何改进建议!

使用random.choice

import random

player_deck = {}

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

d = random.choice(list(deck_of_cards.items()))

player_deck.update(d)

print(player_deck)

{'9': 9}

字典更新序列元素#0的长度为1; 2个为必填项

您可以使用random.choice

import random

player_deck=[]

player_deck.append(random.choice(list(deck_of_cards.items())))

print(player_deck)

您可以执行以下操作:

import random

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

player_deck = dict(random.sample(deck_of_cards.items(),1))

我基本上是从字典中请求\\'1 \\'随机样本,并将输出类型转换为字典(因为它返回列表)。

希望这会有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值