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