Форум сайта python.su
Насколько корректно Питон работает со словарями ключи которых в utf-8 ?
Мне так и не удалось (после загрузки из файла в словарь), обратиться ни к одному элементу по его ключу, вылетает KeyError. Хотя указаные ключ в словаре наличествует.
Офлайн
Очень корректно. Вероятно, ключ наличествовал лишь в воображении Psixo (проблемы правильной работы с unicode тоже возможны).
Чтобы говорить предметно, нужен пример кода.
Подсказка: попытка вывести на коноль получившийся после загрузки dict может сильно облегчить понимание.
Офлайн
Psixo - пересмотри еще раз свой код. Я, например работаю ИСКЛЮЧИТЕЛЬНО в utf-8 и все нормально, я даже в пресловутом ‘site.py’ изменил defaultencoding на utf-8, и все нормально работает….
Так что это проблема не а Python и тут я с Андреем согласен - нужен код.
Офлайн
Хм. Задача стоит примерно такая: загрузить 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"слово которое точно есть в словаре %)"]
Офлайн
Так у вас тут уникод, а не UTF8…
Офлайн
Хм. не поленился проверить по приведенному тобой коду. У меня все нормально отрабатывает ( и скрипт, и csv - оба в UTF-8).
Есть предположение, что читаемый тобою UTF8 файл содержит метку BOM, которая попадает в ключ, берущийся из первой строки.
Сохрани csv без этой метки.
Или, для проверки, попробуй ключ, который находится не на первой строке.
Отредактировано (Ноя. 17, 2008 02:51:05)
Офлайн
Daevaorn, сначало пытался работать с utf-8, затем уже перевёл в юникод,но проблемы остались.
Попробую сохранить словарь в отдельный файл и посмотреть будут ли в нём ключи к которым пытаюсь обратиться (должны быть если чтение прошло корректно)
Офлайн