Answers:
一种方法是:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
编辑:该问题在原始帖子发布后的几年内已更改,现在要求使用一对,而不是单个物品。现在的最后一行应该是:
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
呵呵,为微妙的洗脑+1 ...
试试这个:
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
这绝对有效。
如果您不想使用该random
模块,也可以尝试popitem():
>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)
由于dict
不保留订单,因此使用popitem
可以从中获得任意(但不是严格随机)顺序的项目。
还请记住popitem
,如docs中所述,从字典中删除键值对。
popitem()可用于破坏性地迭代字典
next
字典是映射而不适用于字典这一事实的好方法。(我来这里是为了灵感,仅此而已)。
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
通过在字典(国家/地区)的上调用random.choicekeys
。
random.choice(list(d.keys()))
。
如果您不想使用random.choice(),可以尝试以下方式:
>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'
list(…)
多次生成一个此处。怎么myDictionary_list = list(myDictionary)
样
由于这是家庭作业:
找出random.sample()
哪个将选择并从列表中返回一个随机元素。您可以使用来获得字典键列表和来获得dict.keys()
字典值列表dict.values()
。
random.sample
并且random.choice
不能与迭代器一起使用。他们需要知道序列的长度,而序列的长度无法通过迭代器来确定。
random.sample
返回k
随机元素,random.choice
返回单个随机元素
我假设您正在做一种测验的应用程序。对于这种应用程序,我编写了一个函数,如下所示:
def shuffle(q):
"""
The input of the function will
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
selected_keys = []
i = 0
while i < len(q):
current_selection = random.choice(q.keys())
if current_selection not in selected_keys:
selected_keys.append(current_selection)
i = i+1
print(current_selection+'? '+str(q[current_selection]))
如果我将给出的输入questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
并调用函数shuffle(questions)
,则输出将如下所示:
委内瑞拉?卡拉卡斯 加拿大?多伦多
您还可以通过改组选项进一步扩展此范围
selected_keys
。您可能会重复大约100次。至少像这样删除q的已获取键del(q[current_selection])
-您可以selected_keys
像q = selected_keys
在所有操作之后一样用新改组的q覆盖q 。也不要忘记识别!或者看一下我的np.random.choice(...)
方法:stackoverflow.com/a/62843377/4575793
试试这个(使用来自项目的random.choice)
import random
a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
# ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
# 'num'
与Python(自3)的现代版本,对象的方法返回dict.keys()
,dict.values()
并dict.items()
在视图对象*。嘿可以迭代,因此直接使用random.choice
是不可能的,因为现在它们不是列表或集合。
一种选择是使用列表理解来完成以下工作random.choice
:
import random
colors = {
'purple': '#7A4198',
'turquoise':'#9ACBC9',
'orange': '#EF5C35',
'blue': '#19457D',
'green': '#5AF9B5',
'red': ' #E04160',
'yellow': '#F9F985'
}
color=random.choice([hex_color for color_value in colors.values()]
print(f'The new color is: {color}')
参考文献:
b = { 'video':0, 'music':23,"picture":12 }
random.choice(tuple(b.items())) ('music', 23)
random.choice(tuple(b.items())) ('music', 23)
random.choice(tuple(b.items())) ('picture', 12)
random.choice(tuple(b.items())) ('video', 0)
我通过寻找一个相当可比的解决方案找到了这篇文章。为了从一个字典中挑选多个元素,可以使用:
idx_picks = np.random.choice(len(d), num_of_picks, replace=False) #(Don't pick the same element twice)
result = dict ()
c_keys = [d.keys()] #not so efficient - unfortunately .keys() returns a non-indexable object because dicts are unordered
for i in idx_picks:
result[c_keys[i]] = d[i]
d.keys()
列表中的Python 2.x中工作,但在d.keys()
迭代器中的Python 3.x中则无效。您应该random.choice(list(d.keys()))
改为这样做。