Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2014 16:40:44

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

как итерировать такой словарь

Уважаемые форумчане
Как итерировать такой словарь

slovar = {1:["Организация1", 1000.00],2:["Организация2", 2000.00],3:["Организация3", 3000.00],4:["Организация4", 4000.00]}
что-бы получить три значения за одну итерацию?

Отредактировано ingfa_1981 (Май 7, 2014 16:41:03)

Офлайн

#2 Май 7, 2014 16:42:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как итерировать такой словарь

for k, (v, m) in slovar.items():
    print (k, v, m)



Офлайн

#3 Май 7, 2014 16:59:37

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

как итерировать такой словарь

# -*- coding: utf-8 -*-
slovar = {1:["Организация1", 1000.00],2:["Организация2", 2000.00],3:["Организация3", 3000.00],4:["Организация4", 4000.00]}
print slovar.items()
for k, (v, m) in slovar.items():
    print k, v, m

А почему в 2.7 питоне выводятся коды utf-8 вместо русских букв?

[(1, ['\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f1', 1000.0]), (2, ['\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f2', 2000.0]), (3, ['\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f3', 3000.0]), (4, ['\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f4', 4000.0])]
1 Организация1 1000.0
2 Организация2 2000.0
3 Организация3 3000.0
4 Организация4 4000.0

Офлайн

#4 Май 9, 2014 13:56:01

MindHatter
Зарегистрирован: 2014-05-09
Сообщения: 20
Репутация: +  3  -
Профиль   Отправить e-mail  

как итерировать такой словарь

А почему в 2.7 питоне выводятся коды utf-8 вместо русских букв?

В python 2.x строки - это просто байты (а не коды utf-8). Так они хранятся в памяти. Поскольку ты обращаешься к свойству объекта slovar, а не строке, то его содержимое отображается именно так, как хранится в этом словаре. Но попробуй обратиться к конкретной строке (например, slovar.values() или slovar.items()), и она преобразуетя в удобоваримую кирилицу.

Но на самом деле всю магию декодирования реализует print. Вот, например, набери в консоли:

>>> "Организация", type("Организация")
('\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f', <type 'str'>)
>>> u"Организация", type(u"Организация")
(u'\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f', <type 'unicode'>)

Чувствуешь разницу? Если в первом случае это действительно лишь байты, то во втором уже коды юникод для каждого символа. Но как только ты наберешь:
>>> print u'\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f'
Организация

строка снова на понятном языке. То же будет и при передаче обычной строки, допустим print “Организация”. Строка преобразуется в набор байтов, а print декодирует обратно в строку. Надеюсь, объяснил

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version