2012-03-02 5 views
1

я имею ДИКТ и список как нижеКак пропустить значение переменного в Eval

a = {'aaa': 1, 'bbb': 2, 'ccc': 3} 
b = ['aaa', 'bbb', 'ddd', 'eee'] 

Я сравниваю список b в Словаре a и я печать значений 'aaa' и 'bbb', я не знаю, как хранить значение от aaa=1, bbb=2. Я пытаюсь с помощью этого кода

for i in range(0,len(b)): 
    if b[i] not in d: 
     continue 
    else: 
     print int(a[b[i]]) 

его печати

1 
2 

я хочу назначить aaa=1,bbb=2,ddd=0,eee=0.

И затем, когда я печатаю "print aaa,bbb,ccc,ddd", он должен печатать значения. Переменные в списке b могут меняться, поэтому я должен динамически присваивать значения, которые находятся в b, а не от нуля до нуля.

ответ

1

Попробуйте это

a = {'aaa': 1, 'bbb': 2, 'ccc': 3} 
b = ['aaa', 'bbb', 'ddd', 'eee'] 
c = dict([(x, a.get(x, 0)) for x in a]) 

print "%(aaa)s %(bbb)s %(ccc)s" % c 
+0

Спасибо @ lafada .. Выходное значение - это то, что я хочу, но могу сказать, как хранить значения в динамических переменных вместо одного другого dict .. – user1182090

0

Я предлагаю, чтобы изменить код

for v in b: 
    if v not in a: 
     a[v]=0 
    print a[v], '=', int(a[v]) 

Вы можете использовать defaultdict, а не dict.

+0

Спасибо @ hochl но может у сказать, как создавать переменные динамически, а затем я ВГ asssign, что значения для этого. Например, сравнивая список «b» в dict «a», если ключ принадлежит им, он должен принимать это значение ключа и динамически генерировать переменную и назначать ему. наконец, элементам, которые не принадлежат им в списке «b», необходимо присвоить нулевое значение и сохранить – user1182090

+0

@ user1182090: То, что вы объясняете, действительно плохой дизайн, зачем вам это нужно в первую очередь? –

+0

Вам может быть интересно прочитать здесь: http: // stackoverflow.com/a/8028785/589206 – hochl

2

Вы пытаетесь сделать что-то вроде этого:

for key in b: 
    print key, a.get(key,0) 

Если вам действительно нужны эти новые ключи, чтобы быть в словаре, вы можете сделать это следующим образом:

for key in b: 
    if a.get(key) is None: 
     a[key] = 0 

и печать после как вы это обычно:

for k,v in a.items(): 
    print k,v 

Edit: Ваш комментарий, кажется, что вы сейчас делаете:

eval('aaa+bbb+ccc',b) 
for key in b: 
    if a.get(key) is None: 
     a[key] = 0 
eval('aaa+bbb+ccc',b) 

Вы используете eval для печати? Если да, не делайте этого! Вы можете найти на Why should exec() and eval() be avoided? более полное обсуждение о eval.

Во всяком случае, я предполагаю, что Вы могли бы искать Somthing как:

print sum(a[key] for kay in b) 

Но я действительно не знаю. Измените свой вопрос, объясняя, что вы действительно пытаетесь сделать (с образцами ввода и ожидаемого вывода).

+0

Спасибо @riki poggi, но я хочу использовать эти значения в eval ('aaa + bbb + ccc', b) для ключа в b: , если a.get (key) - None: a [key] = 0 eval ('aaa + bbb + ccc', b) – user1182090

+1

@ user1182090: Чего вы действительно пытаетесь сделать? Пожалуйста, отредактируйте (http://stackoverflow.com/posts/9532178/edit) свой вопрос и предоставьте дополнительную информацию. Также вы не должны использовать 'eval', как описано в ссылке, приведенной выше. –

+0

Извините @Rik. Предположите dict1 = {'a': 1, 'b': 2, 'c': 3} и list1 = ['a', 'b', 'c', 'd']. то, что я хочу в выводе, переменные должны быть динамически сгенерированы и должны содержать значение 'a', 'b' dict1, потому что 'a' и 'b' присутствуют в списке1, а для 'c' и 'd' он должен содержать «ноль», потому что «c» и «d» списка1 не находятся в dict, поэтому он содержит нуль. Мне не нужны эти выходные значения в другом списке r в dict, он должен храниться в переменных. поэтому я могу использовать его в любом месте ... – user1182090

Смежные вопросы