Python 从字典中以随机范围2-4打印K和V

Python 从字典中以随机范围2-4打印K和V,python,python-3.x,Python,Python 3.x,好的,我有一本字典: stock = { 'GOOG':520.54, 'FB': 76.45, 'YHOO':39.28, 'AMZN': 306.21, 'AAPL': 99.76, } 我想它打印一个随机数的键值(2-4之间)。 这里是一个例子,我做了一个列表给你一个想法 items = ['Medkit', 'Water', 'Food', 'Gold', 'Ammo', 'Beer', 'LSD'] print(random.choices(population

好的,我有一本字典:

stock = {
 'GOOG':520.54,
 'FB': 76.45,
 'YHOO':39.28,
 'AMZN': 306.21,
 'AAPL': 99.76,
}
我想它打印一个随机数的键值(2-4之间)。 这里是一个例子,我做了一个列表给你一个想法

items = ['Medkit', 'Water', 'Food', 'Gold',
     'Ammo', 'Beer', 'LSD']

print(random.choices(population=items, k=random.randrange(2, 5)))

我不知道如何对这个进行编码,以便在包含值和键的字典中输出类似的内容。

如果我正确理解了您的问题,您希望得到2到4个随机键及其值

这个怎么样

import random
for i in range(3):
    randomKey = random.choice(stock.keys())
    print(randomKey+" : "+stock[randomKey])
基本上就是这样。我选择了for循环的3次迭代,因为您说过,您需要2到4个随机键。当然,你可以检查两次没有钥匙出现

usedKeys = []
稍后检查您的随机键是否存在,如果不存在,请将其附加到列表中。

dict上的方法项()将为您提供键/值对,例如

>>> stock.items()
[('GOOG', 520.54), ('YHOO', 39.28), ('FB', 76.45), ('AAPL', 99.76),
('AMZN', 306.21)]
所以你可以试试:

print(random.choices(population=list(stock.items()),k=random.randrange(2, 5)))

更新的答案(确保没有重复)

首先获取字典中的键列表(注意,这需要转换为
列表
,否则下一步将不起作用)。接下来,使用
random.shuffle()
来洗牌此密钥列表并确保随机顺序。然后只需使用无序列表中的前2–4个键创建一个新的随机字典,您可以打印它。请注意,此方法确保选择的2–4个随机键是唯一的(与使用
random.choice()
random.choices()
的方法不同,后者可能产生重复项)

示例输出:

{'GOOG': 520.54, 'AMZN': 306.21}
{'AMZN': 306.21, 'GOOG': 520.54, 'YHOO': 39.28}
{'AAPL': 99.76, 'AMZN': 306.21, 'YHOO': 39.28}

欢迎光临!不清楚你到底在找什么。。。您能提供一个包含预期输出的索引吗?请小心,因为Python中的字典是无序的:我认为这几乎是Python 3中的一个副本,它给出了
TypeError:“dict_items”对象不支持索引
stock.items()
在Python 3中实际上是
dict_items[('GOOG',520.54),…]
。您应该在回答中指出这一点。此方法可能会产生重复项,例如
[('GOOG',520.54),('YHOO',39.28),('GOOG',520.54)]
。在Python 3中,这会导致
类型错误:“dict_items”对象不支持索引
{'GOOG': 520.54, 'AMZN': 306.21}
{'AMZN': 306.21, 'GOOG': 520.54, 'YHOO': 39.28}
{'AAPL': 99.76, 'AMZN': 306.21, 'YHOO': 39.28}