Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Нужно часть словаря записать в переменные:


Автор: PyS 21.9.2006, 09:13
Как записать код в одну строку?

Нужно часть словаря записать в переменные:
имя переменной = ключ словаря
значение переменной = значение для ключа словаря


Код

kw=dict(a=1, b=2, c=3, d=4, e=7)
a=kw.kw.get('a',0)
b=kw.get('bl',0)
c=kw.get('c',0)
kw.update(dict(a=a, b=b, c=c))
del kw['a'], kw['b'], kw['c']


Код

print a, b, c


Пожалуйста? помогите!

PS 
выше описанный код работает, но не плох только для не большого количества ключей, которых нужно записать в переменные, а вот когда этих ключей больше 10-15, то уже начинаю плохо ориетироваться в переменных и ключах.

Автор: setq 21.9.2006, 09:28
Код

kw = dict(a=1, b=2, c=3, d=4, e=7)
for k in ['a', 'b', 'c']:
    exec k + ' = kw.get(k, 0)'


Hint: на кукбуке были хорошие рецепты по этой задаче. Просто рекомендую зайти туда и посмотреть.

Автор: albertn 21.9.2006, 09:32
setq, А мне почему-то казалось, что 'bl' там не просто так стоит
Код

kw = dict(a=1, b=2, c=3, d=4, e=7)
for k in {'a':'a', 'b':'bl', 'c':'c'}.items():
    exec k[0] + ' = kw.get(k[1], 0)'

Автор: PyS 21.9.2006, 09:51
немного переделал
Код

kw = dict(a=1, b=2, c=3, d=4, e=7)
for k in {'a':1, 'b':2, 'c':3, 'l':77}.items():
    exec '%s = kw.setdefault(k[0], %s)'%(k[0], k[1])
    exec "del kw['%s']"%(k[0])



Автор: PyS 21.9.2006, 10:54
Цитата(setq @  21.9.2006,  12:28 Найти цитируемый пост)
Hint: на кукбуке были хорошие рецепты по этой задаче. Просто рекомендую зайти туда и посмотреть.

Пожалуйста, дай ссылку! smile

Автор: setq 21.9.2006, 11:13
Не жалко:http://aspn.activestate.com/ASPN/Python/Cookbook/

Автор: PyS 21.9.2006, 11:20
Цитата(setq @  21.9.2006,  14:13 Найти цитируемый пост)
Не жалко:кукБук 

спасибо!

Добавлено @ 11:21 
это книга только для ActivePython или всего Python-а? 

Автор: PyS 21.9.2006, 13:10
ещё изменил
Код

kw = dict(a=1, b=2, c=3, d=4, e=7)
def mytype(x):
    x=int(x)
    return x**x+x
for k in {'a':(1, 'int'), 'b':(2, 'str'), 'c':(3, 'float'), 'l':(77, 'int'), 'w':(12, 'mytype')}.items():
    s1='kw.setdefault(k[0], %s)'%(k[1][0])
    s2=k[1][1]!='' and '%s(%s)'%(k[1][1], s1) or s1
    exec '%s = %s'%(k[0], s2)
    exec "del kw['%s']"%(k[0])


есть вариант как упростить?

Автор: PyAlexey 21.9.2006, 17:59
Цитата(PyS @  21.9.2006,  11:20 Найти цитируемый пост)
это книга только для ActivePython или всего Python-а?  

Для Питона вообще. Там почти тоже, что и в Oreilly Python Cookbook.

Автор: PyS 22.9.2006, 06:54
Цитата(PyAlexey @  21.9.2006,  20:59 Найти цитируемый пост)
Для Питона вообще. Там почти тоже, что и в Oreilly Python Cookbook. 

спасибо!

Cr@$h, спасибо!

Автор: Virtuos86 20.1.2010, 20:21
Не понятно, почему все так упорно(и охотно!) используют инструкцию exec.
Я к её использованию подхожу очень осторожно.
А уж смешивать exec с обычным кодом - это вообще моветон.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)