답변:
한 가지 방법은 다음과 같습니다.
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
편집 : 질문은 원래 게시물 이후 몇 년 동안 변경되었으며 이제 단일 항목이 아닌 한 쌍을 요구합니다. 마지막 줄은 이제 다음과 같아야합니다.
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
이 시도:
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
는 order을 유지하지 않기 때문에 를 사용 popitem
하면 임의의 순서로 항목을 얻습니다 (그러나 엄격하게 무작위는 아님).
또한 docs에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'
호출하여 random.choice을 온 keys
사전 (국가)의.
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를 덮어 쓸 수 있습니다 q = selected_keys
. 또한 식별을 잊지 마십시오! 또는 내 np.random.choice(...)
접근 방식을 살펴보십시오 . stackoverflow.com/a/62843377/4575793
(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)
나는 다소 비슷한 해결책을 찾아서이 게시물을 찾았습니다. 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 2.x에서는 작동 하지만d.keys()
반복자가 있는 Python 3.x에서는 작동하지 않습니다 .random.choice(list(d.keys()))
대신 해야 합니다.