2012-07-27 3 views
9

파이썬에서 유니 코드 문자를 사전의 키로 사용할 수 있습니까? 유니 코드에서 키로 사용한 키릴 어 단어가 있습니다. 키로 값을 얻으려고하면 다음 추적을 얻습니다.유니 코드의 키가있는 사전

Traceback (most recent call last): 
File "baseCreator.py", line 66, in <module> 
    createStoresTable() 
File "baseCreator.py", line 54, in createStoresTable 
    region_id = regions[region] 
KeyError: u'\u041c\u0438\u043d\u0441\u043a/\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0438\u0439\xa0' 
+1

동일한 "문자열"로 다르게 인코딩 된 버전으로 일부 사전을 만들고 쿼리했을 때 비슷한 문제가 발생했습니다. 이것은 찾을 것이 있습니다. 유용한 메소드는'str.encode'와'str.decode' 문자열 메소드입니다. 그리고 물론, 키가 단순히 사전에 존재하지 않아서 키의 실제 인코딩과 아무런 관련이 없을 수도 있습니다. – heltonbiker

+0

파이썬 3.2에서 유니 코드 키에 문제가있을 수 있습니다. – JDong

+0

어떻게 해결 했습니까? 3.4.2에서도 같은 문제가 있습니다. 키를 인쇄했는데 키가 존재하고 여전히 위의 오류가보고되었습니다. 어떤 업데이트가 필요합니까? – Vinodh

답변

6

예, 가능합니다. 오류가 발생하면 사용중인 키가 사전에 존재하지 않는다는 의미입니다.

디버깅하려면 사전을 print 시도하십시오. 실제 키가 어떻게 보이는지 보여주는 각 키의 repr를 볼 수 있습니다.

1

키가 이미 있는지, 값에 액세스했는지, 값을 덮어 쓰는지 여부를 테스트하기 위해 두 개의 키를 비교할 때 파이썬 2.x는 두 키를 비교합니다. 키는 유니 코드로 저장 될 수 있지만 두 개의 별개 유니 코드 문자열은 동일한 테일링으로 축소되는 경우 키로 사용할 수 없습니다.

In []: d = {'a': 1, u'a': 2} 
In []: d 
Out[]: {'a': 2} 

어떤 의미에서는 유니 코드 키를 사용할 수 있습니다.

유니 코드 키를 유니 코드로 유지됩니다 : 키 또는 사용

In []: d2[u'a'] 
Out[]: 1 

In []: d2['a'] 
Out[]: 1 

:

In []: d2 = {u'a': 1} 
In []: d2 
Out[]: {u'a': 1} 

당신은 기존의 키를 "같다"고 bytestring 유니 코드 문자열 또는와 값에 액세스 할 수 있습니다 새로운 값을 쓰는 키와 "같음"하는 것이 성공하고 기존 키를 유지합니다.

In []: d2['a'] = 5 
In []: d2 
Out[]: {u'a': 5} 

'a'을 기존 키와 비교하면 True이므로 기존 유니 코드 키에 해당하는 값이 5으로 바뀌 었습니다. 앞의 예제에서 d의 리터럴에 제공된 두 번째 키 u'a'은 정확하게 이전에 할당 된 키와 비교되므로 bytestring 'a'이 키로 유지되었지만 값은 2으로 덮어 씁니다.

관련 문제