如何在字典中检索随机k-v对?

时间:2017-07-19 20:30:17

标签: python python-3.x

这个想法属于班级卡片 我有词典

pack_of_cards = {'2': 2,'3': 3,'4': 4,'5': 5,'6': 6, \
                 '7': 7,'8': 7,'9': 9,'10': 10,'J': 10, \
                 'D': 10,'K': 10,'T': 10}

我需要这个类将一组随机的键和值作为dict返回。

例如:

Card() == {'T': 10}

感谢大家。

2 个答案:

答案 0 :(得分:0)

您可以使用random.sample()返回所需的卡数,例如:

>>> import random
>>> dict(random.sample(pack_of_cards.items(), k=5))
{'10': 10, '5': 5, '9': 9, 'J': 10, 'K': 10}

(对于cribbage来说不是坏手)

答案 1 :(得分:0)

您可以使用random模块中的方法执行此操作,但除非您的Card类实现__eq__方法,否则它不会有意义。例如:

In [450]: class Card:
     ...:     def __init__(self, suite, num):
     ...:         self.suite = suite
     ...:         self.num = num
     ...:
     ...:     def __eq__(self, item):
     ...:         k, v = list(item.items())[0]
     ...:         return True if (self.suite == k and self.num == v) else False
     ...:     

In [452]: c = Card('T', 10)

In [454]: c == {'T' : 10}
Out[454]: True 

现在你有了一个工人阶级,你可以使用random.choice来提取一张卡片:

In [470]: x = random.choice(list(pack_of_cards.items()))

In [471]: dict([x])
Out[471]: {'D': 10}