如何跳过eval中的变量值

时间:2012-03-02 11:00:32

标签: python

我有dict并列出如下:

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

我正在比较d 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中不在a中的值分配给零。

3 个答案:

答案 0 :(得分: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

修改:从您的评论中看来,您现在正在做的事情:

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的完整讨论。

无论如何,我猜你可能正在寻找类似的东西:

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

但我真的不知道。请编辑您的问题,解释您真正想要做的事情(包括输入和预期输出的样本)。

答案 1 :(得分: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

答案 2 :(得分:0)

我建议将代码更改为

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

您可以使用defaultdict而不是dict