Nasıl rastgele bir çifti alabilirim dict
? Bir ülkenin başkentini tahmin etmeniz gereken bir oyun yapıyorum ve rastgele görünmek için sorulara ihtiyacım var.
dict
oluşacağı{'VENEZUELA':'CARACAS'}
Bunu nasıl yapabilirim?
Nasıl rastgele bir çifti alabilirim dict
? Bir ülkenin başkentini tahmin etmeniz gereken bir oyun yapıyorum ve rastgele görünmek için sorulara ihtiyacım var.
dict
oluşacağı{'VENEZUELA':'CARACAS'}
Bunu nasıl yapabilirim?
Yanıtlar:
Bunun bir yolu:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
DÜZENLEME : Soru, orijinal gönderiden birkaç yıl sonra değiştirildi ve şimdi tek bir öğe yerine bir çift istiyor. Son satır şu şekilde olmalıdır:
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Hehe, çok ince beyin yıkama için +1 ...
Bunu aynı sorunu çözmeye çalışırken yazdım:
https://github.com/robtandy/randomdict
Anahtarlara, değerlere ve öğelere O (1) rastgele erişime sahiptir.
Bunu dene:
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
Bu kesinlikle işe yarıyor.
random
Modülü kullanmak istemiyorsanız popitem () işlevini de deneyebilirsiniz :
>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)
Yana dict
korumaz sırayla kullanarak popitem
ondan keyfi öğeleri (ancak kesinlikle rastgele) sipariş olsun.
Ayrıca popitem
, dokümanlarda belirtildiği gibi anahtar / değer çiftini sözlükten kaldıracağını unutmayın .
popitem () sözlük üzerinde yıkıcı bir şekilde yineleme yapmak için kullanışlıdır
next
, bir eşleme olduğu için bir sözlükle çalışmayan gerçeği aşmanın iyi bir yoludur . (Buraya ilham almak için geldim ve hepsi buydu).
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
Sözlüğün (ülkeler) üzerindeki random.choice öğesini çağırarak keys
.
random.choice(list(d.keys()))
.
Random.choice () kullanmak istemiyorsanız, şu şekilde deneyebilirsiniz:
>>> 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(…)
burada birden çok kez oluşturursunuz. Nasıl myDictionary_list = list(myDictionary)
?
Bu ödev olduğu için:
random.sample()
Hangisinin listeden rastgele bir öğe seçip döndüreceğini kontrol edin . İle sözlük anahtarlarının dict.keys()
bir listesini ve ile sözlük değerlerinin bir listesini alabilirsiniz dict.values()
.
random.sample
ve random.choice
yineleyicilerle çalışamaz. Bir yineleyiciden belirlenemeyen dizinin uzunluğunu bilmeleri gerekir.
random.sample
döner k
rastgele elemanları , random.choice
döner tek bir rastgele eleman
Quiz türünde bir başvuru yaptığınızı varsayıyorum. Bu tür bir uygulama için aşağıdaki gibi bir fonksiyon yazdım:
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]))
Eğer questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
fonksiyonun girişini verir ve çağırırsam shuffle(questions)
Çıkış aşağıdaki gibi olur:
VENEZUELA? CARACAS KANADA? TORONTO
Seçenekleri de karıştırarak bunu daha da genişletebilirsiniz
selected_keys
. Ve bunu yaklaşık 100 kez tekrar edeceksiniz. En azından q gibi alınan anahtarları silin del(q[current_selection])
- selected_keys
tıpkı q = selected_keys
her şeyden sonra olduğu gibi yeni karıştırılmış olarak q'nun üzerine yazabilirsiniz . Ayrıca tanımlama hakkında unutma! Alternatif olarak np.random.choice(...)
yaklaşımıma bakın: stackoverflow.com/a/62843377/4575793
Bunu deneyin (öğelerden random.choice kullanarak)
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'
(3 beri) Python modern versiyonları ile yöntemlerle dönen nesnelerin dict.keys()
, dict.values()
ve dict.items()
* görünümü nesneleri vardır. Ve yin yinelenebilir, bu yüzden random.choice
şimdi bir liste veya küme olmadığı için doğrudan kullanmak mümkün değildir.
Seçeneklerden biri, işi yapmak için liste kavrayışını kullanmaktır 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}')
Referanslar:
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)
Bu yazıyı oldukça benzer bir çözüm arayarak buldum. Bir diksiyondan birden fazla öğe seçmek için bu kullanılabilir:
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()
, bir listenin bulunduğu Python 2.x'te çalışacaktır , ancakd.keys()
bir yineleyici olan Python 3.x'de çalışmaz . Bununrandom.choice(list(d.keys()))
yerine yapmalısınız .