Como posso obter um par aleatório de a dict
? Estou criando um jogo em que você precisa adivinhar a capital de um país e preciso que as perguntas apareçam aleatoriamente.
Os dict
olhares como{'VENEZUELA':'CARACAS'}
Como posso fazer isso?
python
random
dictionary
key
tekknolagi
fonte
fonte
d.keys()
há uma lista, mas não funcionará no Python 3.x, onded.keys()
é um iterador. Você deveria fazer issorandom.choice(list(d.keys()))
.d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Hehe, +1 para a lavagem cerebral muito sutil ...Eu escrevi isso tentando resolver o mesmo problema:
https://github.com/robtandy/randomdict
Possui acesso aleatório O (1) a chaves, valores e itens.
fonte
Tente o seguinte:
Isso definitivamente funciona.
fonte
Se você não quiser usar o
random
módulo, também pode tentar popitem () :Como a
dict
ordem não preserva , usandopopitem
você obtém itens em uma ordem arbitrária (mas não estritamente aleatória).Lembre-se também de que
popitem
remove o par de valores-chave do dicionário, conforme indicado nos documentos .fonte
next
não funciona com um dicionário, pois é um mapeamento. (Eu vim aqui para inspiração e foi isso).Chamando random.choice no
keys
dicionário (os países).fonte
random.choice(list(d.keys()))
.Isso funciona no Python 2 e Python 3:
Uma chave aleatória:
Um valor aleatório
Uma chave e valor aleatórios
fonte
Se você não quiser usar o random.choice (), tente o seguinte:
fonte
list(…)
aqui várias vezes. Que talmyDictionary_list = list(myDictionary)
?Como o post original queria o par :
(estilo python 3)
fonte
Como isso é lição de casa:
Confira o
random.sample()
que selecionará e retornará um elemento aleatório de uma lista. Você pode obter uma lista de chaves de dicionário comdict.keys()
e uma lista de valores de dicionário comdict.values()
.fonte
random.sample
erandom.choice
não pode trabalhar com iteradores. Eles precisam saber o comprimento da sequência, que não pode ser determinado a partir de um iterador.random.sample
retorna elementosk
aleatórios , retorna um único elemento aleatóriorandom.choice
Estou assumindo que você está fazendo um tipo de aplicativo de teste. Para esse tipo de aplicativo, escrevi uma função que é a seguinte:
Se eu vou dar a entrada
questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
e chamar a funçãoshuffle(questions)
a saída será a seguinte:Você pode estender ainda mais isso misturando as opções também
fonte
selected_keys
. E você provavelmente repetirá isso cerca de 100 vezes. Pelo menos apague as teclas capturadas de q likedel(q[current_selection])
- você pode sobrescrever q com o novo shuffledselected_keys
comoq = selected_keys
depois de tudo. Também não se esqueça de identificar! Como alternativa, observe minhanp.random.choice(...)
abordagem: stackoverflow.com/a/62843377/4575793Tente isso (usando random.choice dos itens)
fonte
Com versões modernas de Python (desde 3), a objetos retornados por métodos
dict.keys()
,dict.values()
edict.items()
são vista objetos *. E ei, pode ser iterado, portanto, o uso diretorandom.choice
não é possível, pois agora eles não são uma lista ou conjunto.Uma opção é usar a compreensão da lista para fazer o trabalho com
random.choice
:Referências:
fonte
fonte
Encontrei este post procurando uma solução comparável. Para escolher vários elementos de um dict, isso pode ser usado:
fonte