복붙노트

[PYTHON] dict.keys () [0] (Python 3)

PYTHON

dict.keys () [0] (Python 3)

나는이 문장을 가지고있다.

def Ciudad(prob):
    numero = random.random()
    ciudad = prob.keys()[0]
    for i in prob.keys():
        if(numero > prob[i]):
            if(prob[i] > prob[ciudad]):
                ciudad = i
        else:
            if(prob[i] > prob[ciudad]):
                ciudad = i

    return ciudad

하지만이 오류가 나타 났을 때 :

TypeError: 'dict_keys' object does not support indexing

버전 문제입니까? 파이썬 3.3.2를 사용하고 있습니다.

해결법

  1. ==============================

    1.dict.keys ()는 사전보기입니다. 사전에 list ()를 직접 사용하십시오. 키 목록이 필요하면 항목 0이 (임의의) 사전 순서의 첫 번째 키가됩니다.

    dict.keys ()는 사전보기입니다. 사전에 list ()를 직접 사용하십시오. 키 목록이 필요하면 항목 0이 (임의의) 사전 순서의 첫 번째 키가됩니다.

    list(prob)[0]
    

    또는 더 나은 여전히 ​​그냥 사용 :

    next(iter(dict))
    

    두 가지 방법 모두 Python 2와 3에서 작동하며 next () 옵션은 dict.keys ()를 사용하는 것보다 확실히 Python 2에서 더 효율적입니다. 그러나 사전에는 순서가 설정되지 않으므로 어떤 키가 먼저 나열되는지 알 수 없습니다.

    dict.get과 함께 max ()를 사용하여 최대 키를 찾으려는 것처럼 보입니다.

    def Ciudad(prob):
        return max(prob, key=prob.get)
    

    함수 결과는 if 문의 난수 비교 분기 사이의 코드 경로가 코드와 다르지 않으므로 특정 prob 사전에 대해 확실히 동일하게됩니다.

  2. ==============================

    2.파이썬 3.x에서 dict.keys ()는리스트를 반환하지 않고 iterable (특히 사전보기)을 반환합니다. 대부분의 경우, dict를 직접 사용하는 것이 iterable 자체이므로 적은 코드가 필요하므로 직접 사용하는 것이 좋습니다.

    파이썬 3.x에서 dict.keys ()는리스트를 반환하지 않고 iterable (특히 사전보기)을 반환합니다. 대부분의 경우, dict를 직접 사용하는 것이 iterable 자체이므로 적은 코드가 필요하므로 직접 사용하는 것이 좋습니다.

    하나의 임의 항목을 얻고 싶다면 (사전에 순서가 없으므로 순서는 임의적이므로 'first'요소는 임의의 것입니다.) next (iter (dict))를 대신 사용하십시오.

    (우리는 사전보기에서 iterable을 가져온 다음 next ()를 사용하여 하나씩 앞으로 이동하고 항목을 가져옵니다).

    항목을 반복 할 필요가있는 경우 - 직접 dict을 반복합니다.

    리스트가 생성되지 않는다는 것을 의미하는 list ()를 사용하는 것이 유리합니다 - 더 빠르고 효율적으로 메모리를 만들 수 있습니다. (3.x에서 keys ()의 기본 동작이 변경된 이유).

  3. ==============================

    3.사전에서 가져온 iterables를 목록으로 변환하는 것이 성공했습니다. 따라서 dic.keys (), dic.values ​​() 및 dic.items ()의 경우 Python3.6에서 다음을 수행 할 수 있습니다.

    사전에서 가져온 iterables를 목록으로 변환하는 것이 성공했습니다. 따라서 dic.keys (), dic.values ​​() 및 dic.items ()의 경우 Python3.6에서 다음을 수행 할 수 있습니다.

    dic = {'a':3, 'b':2, 'c':3}
    print(dic)
    
    dictkeys = dic.keys() # or values/items
    print(dictkeys)
    
    keylist = []
    keylist.extend(iter(dictkeys)) # my big revelation
    print('keylist', keylist)
    
  4. from https://stackoverflow.com/questions/18686903/dict-keys0-on-python-3 by cc-by-sa and MIT license