Python 2.x converte entrambe le chiavi in estensioni quando si confrontano due chiavi allo scopo di verificare se esiste già una chiave, accedere a un valore o sovrascrivere un valore. Una chiave può essere memorizzata come Unicode, ma due stringhe Unicode distinte non possono essere utilizzate entrambe come chiavi se si riducono a identici bytestrings.
In []: d = {'a': 1, u'a': 2}
In []: d
Out[]: {'a': 2}
È possibile utilizzare le chiavi Unicode, in un certo senso.
chiavi
Unicode vengono mantenuti in Unicode:
In []: d2 = {u'a': 1}
In []: d2
Out[]: {u'a': 1}
È possibile accedere al valore con qualsiasi stringa Unicode o bytestring che "è uguale a" la chiave esistente:
In []: d2[u'a']
Out[]: 1
In []: d2['a']
Out[]: 1
Con il tasto o tutto ciò che "equivale" alla chiave per scrivere un nuovo valore avrà successo e conserverà la chiave esistente:
In []: d2['a'] = 5
In []: d2
Out[]: {u'a': 5}
Poiché il confronto di 'a'
in una chiave esistente era True
, il valore corrispondente a quella chiave Unicode esistente è stato sostituito con 5
. Nell'esempio iniziale che ho fornito, il secondo tasto u'a'
fornito nel letterale per d
si confronta in modo veritiero con la chiave assegnata in precedenza, pertanto il test 'a'
è stato mantenuto come chiave ma il valore è stato sovrascritto con 2
.
fonte
2015-12-30 11:04:02
Ho avuto problemi simili quando ho creato e interrogato un dizionario con versioni codificate in modo diverso della stessa "stringa". Questo è qualcosa da cercare. Metodi utili sono i metodi di stringa 'str.encode' e' str.decode'. E, naturalmente, è possibile che la chiave semplicemente non esista nel dizionario, non avendo quindi nulla a che fare con la vera codifica della chiave. – heltonbiker
Potrebbero esserci problemi con le chiavi unicode in python 3.2. – JDong
Come hai risolto questo? Ho lo stesso problema in 3.4.2. Ho stampato le chiavi e le chiavi sono già presenti e ricevo comunque l'errore sopra riportato. Qualche aggiornamento per favore? – Vinodh