如何在字典中的列表中找到随机对象?

时间:2018-03-06 17:52:24

标签: python python-3.x

我正在做hangman并为了这个问题简化了我的代码。

基本上我试图在用户输入的字典中随机选择一个随机对象,在用户选择的任何选项中。例如,如果用户为opt选择了一个,并且为opt选择了FIRST,则randomOpt将设置为a,b或c。

categ = input('hello OR hi: ')
opt = input('FIRST, SECOND, OR LAST: ')

hello = {'FIRST':['a','b','c'],'SECOND':['z','x','y'],'LAST':['t','u','v']}

hi = {'FIRST':[1, 2, 3], 'SECOND':[20, 19, 18], 'LAST': [10, 11, 12]}

import random
randomOpt = random.choice(categ[opt])
print(randomOpt)

每当我运行它时,Python返回'字符串索引必须是整数' 我的朋友建议做

categ = input('hello OR hi: ')
opt = input('FIRST, SECOND, OR LAST: ')

hello = {'FIRST':['a','b','c'],'SECOND':['z','x','y'],'LAST':['t','u','v']}

hi = {'FIRST':[1, 2, 3], 'SECOND':[20, 19, 18], 'LAST': [10, 11, 12]}

import random

if categ == 'hello':
   randomOpt = random.choice(hello[opt])
elif categ == 'hi':
   randomOpt = random.choice(hi[opt])

print(randomOpt)

但我认为这样做感觉不那么“动态”了 任何人都可以帮我弄清楚为什么这段代码不起作用,以及我如何编辑来修复它?

2 个答案:

答案 0 :(得分:2)

您希望另一个字典,并以hellohi作为键。

stuff = {
    'hello': hello,
    'hi': hi
}

randomOpt = random.choice(stuff[categ][opt])

答案 1 :(得分:1)

只需添加其他级别的嵌套。

choices = {'hello': hello,
           'hi': hi
}

您还可以使用.keys字典方法向用户动态显示选项。

所以也许像

user_choice = input('Choose one: ' + ' '.join(choices.keys())
choice = choices[user_choice]
options = ' '.join(choice.keys())
user_opt = input('Choose one: ' + options)
population = choice[user_opt]
print(random.choice(population))

在处理嵌套数据时,在遍历嵌套结构IE nested = parent[key]more_nested = nested[other_key]等时可以帮助命名变量,这对我来说比{{{{{{{ 1}}