사전에 색인을 생성하는 방법은 무엇입니까?
아래에 사전이 있습니다.
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의 규칙에 따라 DICTIONARY는 순서가 없습니다.
있는 경우
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 는 질서 가 없습니다 !
실제로 저에게 도움이되는 새로운 솔루션을 찾았습니다. 목록이나 데이터 세트에서 특정 값의 인덱스에 특히 관심이 있다면 사전의 값을 해당 인덱스로 설정하면됩니다! :
그냥 봐:
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}
Now through the power of hashmaps you can pull the index your entries in constant time (aka a whole lot faster)
If you need an ordered dictionary, you can use odict.
oh, that's a tough one. What you have here, basically, is two values for each item. Then you are trying to call them with a number as the key. Unfortunately, one of your values is already set as the key!
Try this:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Now you can call the keys by number as if they are indexed like a list. You can also reference the color and number by their position within the list.
For example,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Of course, you will have to come up with another way of keeping track of what location each color is in. Maybe you can have another dictionary that stores each color's key as it's value.
colors_key = {'blue': 1, 'red': 6, 'yllow': 8}
Then, you will be able to also look up the colors key if you need to.
colors[colors_key['blue']][0] will return 'blue'
Something like that.
And then, while you're at it, you can make a dict with the number values as keys so that you can always use them to look up your colors, you know, if you need.
values = {5: [1, 'blue'], 6: [2, 'red'], 8: [3, 'yellow']}
Then, (colors[colors_key[values[5][1]]][0]) will return 'blue'.
Or you could use a list of lists.
Good luck!
You can't, since dict
is unordered. you can use .popitem()
to get an arbitrary item, but that will remove it from the dict.
참고URL : https://stackoverflow.com/questions/4326658/how-to-index-into-a-dictionary
'developer tip' 카테고리의 다른 글
Angular 2 구성 요소 @Input이 작동하지 않습니다. (0) | 2020.11.07 |
---|---|
이전 인증을 사용하여 MySQL 4.1+에 연결할 수 없습니다. (0) | 2020.11.07 |
패턴 매칭 vs if-else (0) | 2020.11.07 |
덤프 파일을 사용하여 메모리 누수를 진단하려면 어떻게합니까? (0) | 2020.11.07 |
하위 요소의 불투명도 재설정-Maple Browser (삼성 TV 앱) (0) | 2020.11.07 |