ฉันจะสุ่มจับคู่จาก a ได้dict
อย่างไร? ฉันกำลังสร้างเกมที่คุณต้องเดาเมืองหลวงของประเทศและฉันต้องการคำถามให้ปรากฏแบบสุ่ม
dict
ดูเหมือน{'VENEZUELA':'CARACAS'}
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันจะสุ่มจับคู่จาก a ได้dict
อย่างไร? ฉันกำลังสร้างเกมที่คุณต้องเดาเมืองหลวงของประเทศและฉันต้องการคำถามให้ปรากฏแบบสุ่ม
dict
ดูเหมือน{'VENEZUELA':'CARACAS'}
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
วิธีหนึ่งจะเป็น:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
แก้ไข : คำถามถูกเปลี่ยนไปสองสามปีหลังจากโพสต์ต้นฉบับและตอนนี้ขอคู่แทนที่จะเป็นรายการเดียว บรรทัดสุดท้ายควรเป็น:
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
ฉันเขียนนี้พยายามแก้ปัญหาเดียวกัน:
https://github.com/robtandy/randomdict
มีการเข้าถึงคีย์ค่าและรายการแบบสุ่ม O (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
เอาคู่ค่าคีย์จากพจนานุกรมตามที่ระบุไว้ในเอกสาร
popitem () มีประโยชน์ในการย้ำซ้ำในพจนานุกรม
next
ไม่สามารถใช้งานได้กับพจนานุกรมเนื่องจากเป็นแผนที่ (ฉันมาที่นี่เพื่อเป็นแรงบันดาลใจและนี่คือมัน)
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
โดยการเรียกเลขสุ่มเลือกในkeys
พจนานุกรม (ประเทศ)
random.choice(list(d.keys()))
เพื่อแก้ไขข้อผิดพลาดการใช้งาน
สิ่งนี้ใช้ได้ใน Python 2 และ Python 3:
คีย์สุ่ม:
random.choice(list(d.keys()))
ค่าสุ่ม
random.choice(list(d.values()))
คีย์และค่าแบบสุ่ม
random.choice(list(d.items()))
หากคุณไม่ต้องการใช้ 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)
ล่ะ
เนื่องจากโพสต์ต้นฉบับต้องการทั้งคู่ :
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))
(สไตล์หลาม 3)
ตั้งแต่นี้เป็นการบ้าน:
ตรวจสอบ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)
จากนั้นเอาต์พุตจะเป็นดังนี้:
เวเนซุเอลา? CARACAS แคนาดา? โตรอนโต
คุณสามารถขยายเพิ่มเติมได้อีกด้วยการสับตัวเลือกด้วย
selected_keys
ที่จะตีภายในองค์ประกอบของ และคุณอาจจะทำซ้ำประมาณ 100 ครั้ง อย่างน้อยก็ลบคีย์ที่ถ่ายของ q like del(q[current_selection])
- คุณสามารถเขียนทับ q ด้วย shuffled ใหม่selected_keys
เหมือนq = selected_keys
ทุกอย่าง อย่าลืมระบุด้วย! หรือดู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'
กับรุ่นที่ทันสมัยของงูใหญ่ (ตั้งแต่ 3) วัตถุที่ส่งกลับโดยวิธีการdict.keys()
, dict.values()
และdict.items()
มีมุมมองที่วัตถุ * และสามารถทำซ้ำได้ดังนั้นการใช้โดยตรงrandom.choice
จึงเป็นไปไม่ได้เนื่องจากตอนนี้พวกมันไม่ใช่รายการหรือชุด
ทางเลือกหนึ่งคือการใช้ list comprehension เพื่อทำงานด้วย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)
ฉันพบโพสต์นี้โดยมองหาโซลูชันที่เปรียบเทียบกันได้ สำหรับการเลือกหลายองค์ประกอบจาก dict สามารถใช้สิ่งนี้ได้:
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 3.x ซึ่งd.keys()
เป็นตัววนซ้ำ คุณควรทำrandom.choice(list(d.keys()))
แทน