사전에서 임의의 값을 얻는 방법
를 '''에서 수 요?dict
한 나라의 수도를 맞혀야 하고 무작위로 나타나려면 질문이 필요한 게임을 만들고 있습니다.
dict
가 마치{'VENEZUELA':'CARACAS'}
이거 어떻게 해?
한 가지 방법은 다음과 같습니다.
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
편집: 질문은 처음 게시한 지 몇 년 후에 바뀌었고, 이제는 하나의 항목이 아닌 쌍을 요구합니다.이제 마지막 줄은 다음과 같습니다.
country, capital = random.choice(list(d.items()))
저는 같은 문제를 해결하기 위해 이 글을 썼습니다.
https://github.com/robtandy/randomdict
키, 값 및 항목에 대한 O(1) 랜덤 액세스 권한이 있습니다.
를 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()은 사전을 통해 파괴적으로 반복할 때 유용합니다.
이것을 시험해 보세요.
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
이건 확실히 효과가 있어요.
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
무작위로 전화를 해서.에 대한 선택keys
(어느 쪽인가 하면)
이것은 Python 2와 Python 3에서 동작합니다.
임의의 키:
random.choice(list(d.keys()))
랜덤값
random.choice(list(d.values()))
랜덤 키 및 값
random.choice(list(d.items()))
원래 게시물은 이 쌍을 원했기 때문에:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))
(3가지 스타일 포함)
랜덤으로 쓰고 싶지 않다면.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'
이게 숙제니까:
목록에서 임의의 요소를 선택하여 반환하는 것을 확인합니다.사전 키 목록은 다음과 같이 얻을 수 있습니다.dict.keys()
사전 값에는 " "가 포함되어 있습니다.dict.values()
저는 당신이 퀴즈 어플리케이션을 만들고 있다고 생각합니다.이러한 어플리케이션에 대해 다음과 같은 함수를 작성했습니다.
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)
을 사용하다
베네수엘라?카라카스캐나다? 토론토
옵션을 섞으면 이 기능을 더 확장할 수 있습니다.
Python(에서는 메서드 「Python(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}')
참고 자료:
- * Python 3.8: Standard Library Documentation - 빌트인 타입: 사전 보기 개체
- Python 3.8: 데이터 구조 - 목록 통합:
여기서 랜덤 페어를 요구하는 것은 키와 값을 의미합니다.
key:values는 country:city,
랜덤으로 사용하다선택지
다음과 같이 사전 키를 이 함수에 전달합니다.
import random
keys = list(my_dict)
country = random.choice(keys)
라운드에서 이미 호출된 키를 추적하고 새로운 국가를 가져올 때 추첨된 목록이 키 목록보다 짧으면 랜덤 선택이 이미 그려진 항목 목록에 없을 때까지 루프할 수 있습니다.
우연히 비슷한 문제를 발견하고 다음 솔루션을 설계했습니다(관련 기능은pick_random_item_from_dict
; 다른 기능은 완전성을 위한 것입니다.)
import random
def pick_random_key_from_dict(d: dict):
"""Grab a random key from a dictionary."""
keys = list(d.keys())
random_key = random.choice(keys)
return random_key
def pick_random_item_from_dict(d: dict):
"""Grab a random item from a dictionary."""
random_key = pick_random_key_from_dict(d)
random_item = random_key, d[random_key]
return random_item
def pick_random_value_from_dict(d: dict):
"""Grab a random value from a dictionary."""
_, random_value = pick_random_item_from_dict(d)
return random_value
# Usage
d = {...}
random_item = pick_random_item_from_dict(d)
이전 답변과의 주요 차이점은 사전 복사본을 처리하는 방법입니다.list(d.items())
복사하는 것만으로 부분적으로 피할 수 있습니다.d.keys()
랜덤 키를 사용하여 관련 값을 선택하고 랜덤 아이템을 만듭니다.
이것을 사용해 보세요(랜덤 사용).항목에서 선택)
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'
다음은 O(1) 시간 내에 임의의 키를 반환할 수 있는 사전 클래스의 작은 Python 코드입니다.(가독성을 위해 MyPy 타입을 이 코드에 포함시켰습니다).
from typing import TypeVar, Generic, Dict, List
import random
K = TypeVar('K')
V = TypeVar('V')
class IndexableDict(Generic[K, V]):
def __init__(self) -> None:
self.keys: List[K] = []
self.vals: List[V] = []
self.dict: Dict[K, int] = {}
def __getitem__(self, key: K) -> V:
return self.vals[self.dict[key]]
def __setitem__(self, key: K, val: V) -> None:
if key in self.dict:
index = self.dict[key]
self.vals[index] = val
else:
self.dict[key] = len(self.keys)
self.keys.append(key)
self.vals.append(val)
def __contains__(self, key: K) -> bool:
return key in self.dict
def __len__(self) -> int:
return len(self.keys)
def random_key(self) -> K:
return self.keys[random.randrange(len(self.keys))]
사전 세트에서 50개의 랜덤 키 값을 선택하려면dict_data
:
sample = random.sample(set(dict_data.keys()), 50)
키 범위를 반복할 필요가 있었습니다dict
매번 정렬하지 않고 정렬된 컨테이너 라이브러리를 찾았습니다.이 라이브러리는 인덱스별로 사전 항목에 랜덤으로 액세스할 수 있으므로 매번 반복하지 않고 직관적으로 문제를 해결할 수 있습니다.
>>> import sortedcontainers
>>> import random
>>> d = sortedcontainers.SortedDict({1: 'a', 2: 'b', 3: 'c'})
>>> random.choice(d.items())
(1, 'a')
>>> random.sample(d.keys(), k=2)
[1, 3]
저는 비슷한 해결책을 찾다가 이 게시물을 발견했습니다.딕트에서 여러 요소를 선택할 경우 다음과 같이 사용할 수 있습니다.
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]
한 가지 방법은 다음과 같습니다.
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
편집: 질문은 처음 게시한 지 몇 년 후에 바뀌었고, 이제는 하나의 항목이 아닌 쌍을 요구합니다.이제 마지막 줄은 다음과 같습니다.
country, capital = random.choice(list(d.items()))
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)
언급URL : https://stackoverflow.com/questions/4859292/how-to-get-a-random-value-from-dictionary
'source' 카테고리의 다른 글
ValueError: 기본이 10인 int()의 리터럴이 잘못되었습니다. (0) | 2022.10.27 |
---|---|
pdf 파일 다운로드를 위한 PHP 헤더 수정 (0) | 2022.10.27 |
열에 있는 각 개별 값의 카운트를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.26 |
HTTP 프로토콜의 PUT 및 DELETE 및 PHP에서의 사용 (0) | 2022.10.26 |
조건부로 부모 요소 렌더링, 내부 html 유지 (0) | 2022.10.26 |