如何跳过eval中的变量值



我有如下的dict和列表

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

我正在比较dict a中的列表b,并打印'aaa''bbb'的值,我不知道如何存储aaa=1bbb=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中不在a中的值分配给零。

你想做这样的事情吗:

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

编辑:从你的评论来看,你现在似乎在做:

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

您是否使用eval进行打印?如果你是,不要那样做!您可以在中找到为什么要避免exec()和eval()?关于CCD_ 12的更全面的讨论。

不管怎样,我猜你可能正在寻找这样的东西:

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

但我真的不知道。请编辑你的问题,解释你真正想做什么(使用输入和预期输出的样本)。

试试这个

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

我建议将代码更改为

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

您可以使用defaultdict而不是dict

最新更新