아래에 사전이 있습니다.
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
사전의 첫 번째 항목을 어떻게 인덱싱합니까?
colors[0]
KeyError
명백한 이유로를 반환합니다 .
답변
사전은 Python 3.6 이하의 Python 버전에서 정렬되지 않습니다. 당신이 항목의 순서에 관심 어쨌든 인덱스로 키 또는 값에 액세스하지 않으려면, 당신이 사용할 수있는 d.keys()[i]
및 d.values()[i]
나 d.items()[i]
. (이러한 메서드는 Python 2.x에서 모든 키, 값 또는 항목의 목록을 생성합니다. 따라서 한 번 더 필요한 경우 목록을 변수에 저장하여 성능을 향상시킵니다.)
항목의 순서에 관심이 있다면 Python 2.7부터 collections.OrderedDict
. 또는 쌍 목록 사용
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
키로 액세스 할 필요가없는 경우. (왜 당신의 숫자는 문자열입니까?)
Python 3.7에서는 일반 사전이 정렬되어 있으므로 OrderedDict
더 이상 사용할 필요가 없습니다 (하지만 여전히 사용할 수 있습니다. 기본적으로 동일한 유형입니다). Python 3.6의 CPython 구현에는 이미 해당 변경 사항이 포함되어 있지만 언어 사양의 일부가 아니기 때문에 Python 3.6에서는이를 신뢰할 수 없습니다.
답변
여전히이 질문을보고있는 사람이 있다면 현재 허용되는 답변은 이제 구식입니다.
Python 3.7 * 이후 사전은 순서를 유지합니다 . 즉, 이제는 collections.OrderedDict
예전 처럼 정확하게 작동 합니다. 불행하게도,에 인덱스 전담 방법은 여전히 존재 keys()
/ values()
사전의 때문에 사전에 최초의 키 / 값으로 수행 할 수 있습니다지고,
first_key = list(colors)[0]
first_val = list(colors.values())[0]
또는 (이렇게하면 키보기를 목록으로 인스턴스화하지 않음) :
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
n
-th 키 가 필요한 경우 비슷하게
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6에는 이미 정렬 된 dict가 포함되어 있지만 이것은 구현 세부 사항 일뿐입니다. 언어 사양에는 3.7 이후의 정렬 된 dict가 포함되어 있습니다.)
답변
사전의 요소를 다루는 것은 당나귀에 앉아 타고 즐기는 것과 같습니다.
Python의 규칙에 따라 사전은 순서가 없습니다.
있는 경우
dic = {1: "a", 2: "aa", 3: "aaa"}
이제 내가 이렇게 가면 dic[10] = "b"
항상 이렇게 추가되지 않을 것이라고 가정하십시오.
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
아마도
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
또는
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
또는
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
또는 그러한 조합.
그래서 경험의 법칙은 DICTIONARY 는 질서 가 없다는 것입니다 !
답변
정렬 된 사전이 필요한 경우 odict 를 사용할 수 있습니다 .
답변
실제로 저에게 도움이되는 새로운 솔루션을 찾았습니다. 목록이나 데이터 세트에서 특정 값의 인덱스에 특히 관심이 있다면 사전 값을 해당 인덱스로 설정할 수 있습니다! :
그냥 봐:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
이제 해시 맵의 힘을 통해 항목 색인을 일정한 시간에 가져올 수 있습니다 (훨씬 더 빠름).
답변
오, 그것은 힘든 일입니다. 기본적으로 여기에있는 것은 각 항목에 대한 두 개의 값입니다. 그런 다음 번호를 키로 사용하여 전화를 겁니다. 안타깝게도 값 중 하나가 이미 키로 설정되어 있습니다!
이 시도:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
이제 목록처럼 인덱싱 된 것처럼 번호로 키를 호출 할 수 있습니다. 목록 내 위치별로 색상과 번호를 참조 할 수도 있습니다.
예를 들면
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
물론 각 색상이 어떤 위치에 있는지 추적하는 또 다른 방법을 찾아야합니다. 각 색상의 키를 값으로 저장하는 또 다른 사전을 가질 수 있습니다.
colors_key = { ‘파란색’: 1, ‘빨간색’: 6, ‘일 로우’: 8}
그런 다음 필요한 경우 색상 키도 조회 할 수 있습니다.
colors [colors_key [ ‘blue’]] [0]은 ‘blue’를 반환합니다.
그런 것.
그런 다음 필요한 경우 숫자 값을 키로 사용하여 항상 색상을 조회하는 데 사용할 수 있도록 딕셔너리를 만들 수 있습니다.
값 = {5 : [1, ‘파란색’], 6 : [2, ‘빨간색’], 8 : [3, ‘노란색’]}
그러면 (colors [colors_key [values [5] [1]]] [0])은 ‘blue’를 반환합니다.
또는 목록 목록을 사용할 수 있습니다.
행운을 빕니다!
답변
dict
순서가 지정되지 않았으므로 할 수 없습니다 . 을 사용 .popitem()
하여 임의의 항목을 가져올 수 있지만 dict에서 제거됩니다.