Python 2.x chuyển đổi cả hai khóa thành mã xác nhận khi so sánh hai khóa cho mục đích kiểm tra xem khóa đã tồn tại chưa, truy cập giá trị hoặc ghi đè giá trị. Một khóa có thể được lưu trữ dưới dạng Unicode, nhưng hai chuỗi Unicode riêng biệt không thể được sử dụng như là các khóa nếu chúng giảm xuống thành các chuỗi giống nhau.
In []: d = {'a': 1, u'a': 2}
In []: d
Out[]: {'a': 2}
Bạn có thể sử dụng các phím Unicode theo một nghĩa nào đó.
phím
Unicode được giữ lại trong Unicode:
In []: d2 = {u'a': 1}
In []: d2
Out[]: {u'a': 1}
Bạn có thể truy cập vào các giá trị với bất kỳ chuỗi Unicode hoặc bytestring rằng "bằng" chìa khóa hiện có:
In []: d2[u'a']
Out[]: 1
In []: d2['a']
Out[]: 1
Sử dụng phím hoặc bất kỳ điều gì "bằng" khóa để viết giá trị mới sẽ thành công và giữ lại khóa hiện tại:
In []: d2['a'] = 5
In []: d2
Out[]: {u'a': 5}
Bởi vì so sánh 'a'
với khóa hiện tại là True
, giá trị tương ứng với khóa Unicode hiện có đã được thay thế bằng 5
. Trong ví dụ ban đầu tôi đưa ra, khóa thứ hai u'a'
được cung cấp bằng chữ cho số d
so sánh trung thực với khóa đã gán trước đó, do đó, mã kiểm tra 'a'
được giữ lại làm khóa nhưng giá trị được ghi đè bằng 2
.
Nguồn
2015-12-30 11:04:02
Tôi gặp sự cố tương tự khi tạo và truy vấn một số từ điển với các phiên bản được mã hóa khác nhau của cùng một "chuỗi". Đây là một cái gì đó để tìm kiếm. Các phương thức hữu ích là các phương thức chuỗi 'str.encode' và' str.decode'. Và, tất nhiên, có thể là chìa khóa chỉ đơn giản là không tồn tại trong từ điển, do đó không có gì để làm với mã hóa thực tế của khóa. – heltonbiker
Có thể có vấn đề với các khóa unicode trong python 3.2. – JDong
Bạn đã giải quyết vấn đề này bằng cách nào? Tôi có cùng một vấn đề trong 3.4.2. Tôi đã in các phím và các phím có sẵn và vẫn nhận được báo cáo ở trên error.Any cập nhật xin vui lòng? – Vinodh