Найти - Пользователи
Полная версия: как итерировать такой словарь
Начало » Python для новичков » как итерировать такой словарь
1
ingfa_1981
Уважаемые форумчане
Как итерировать такой словарь
slovar = {1:["Организация1", 1000.00],2:["Организация2", 2000.00],3:["Организация3", 3000.00],4:["Организация4", 4000.00]}
что-бы получить три значения за одну итерацию?
FishHook
for k, (v, m) in slovar.items():
    print (k, v, m)
ingfa_1981
# -*- 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
MindHatter
А почему в 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 декодирует обратно в строку. Надеюсь, объяснил
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