Найти - Пользователи
Полная версия: Ключи словаря в utf-8
Начало » Python для экспертов » Ключи словаря в utf-8
1
Psixo
Насколько корректно Питон работает со словарями ключи которых в utf-8 ?
Мне так и не удалось (после загрузки из файла в словарь), обратиться ни к одному элементу по его ключу, вылетает KeyError. Хотя указаные ключ в словаре наличествует.
Андрей Светлов
Очень корректно. Вероятно, ключ наличествовал лишь в воображении Psixo (проблемы правильной работы с unicode тоже возможны).
Чтобы говорить предметно, нужен пример кода.
Подсказка: попытка вывести на коноль получившийся после загрузки dict может сильно облегчить понимание.
regall
Psixo - пересмотри еще раз свой код. Я, например работаю ИСКЛЮЧИТЕЛЬНО в utf-8 и все нормально, я даже в пресловутом ‘site.py’ изменил defaultencoding на utf-8, и все нормально работает….
Так что это проблема не а Python и тут я с Андреем согласен - нужен код.
Psixo
Хм. Задача стоит примерно такая: загрузить csv файл с данными в utf-8 в словарь, затем в программе идёт обращение к различным элементам словаря по их ключам.
Я попытался это сделать примерно так:

	base = {}
F = open(base_name, "rb")
sinonim_base = csv.reader(F)
for row in sinonim_base:
if len(row) > 1:
base[unicode(row[0].strip(), 'utf-8')] = unicode(row[1].strip(), 'utf-8')
F.close()
Загрузка происходит без проблем,но обратиться к элементам словаря я не могу:

print "Sinonim: ",  base[u"слово которое точно есть в словаре %)"]
Вылетает KeyError.
Честно говоря с кодировками в Питоне происходит нечто непонятное, часто вылезают проблемы откуда их совершенно не ждёшь. В PHP и Perl с этим как-то проще.
Александр Кошелев
Так у вас тут уникод, а не UTF8…
shiza
Хм. не поленился проверить по приведенному тобой коду. У меня все нормально отрабатывает ( и скрипт, и csv - оба в UTF-8).

Есть предположение, что читаемый тобою UTF8 файл содержит метку BOM, которая попадает в ключ, берущийся из первой строки.
Сохрани csv без этой метки.
Или, для проверки, попробуй ключ, который находится не на первой строке.
Psixo
Daevaorn, сначало пытался работать с utf-8, затем уже перевёл в юникод,но проблемы остались.

Попробую сохранить словарь в отдельный файл и посмотреть будут ли в нём ключи к которым пытаюсь обратиться (должны быть если чтение прошло корректно)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB