在python2中存放变量名称

时间:2018-01-11 15:56:33

标签: python

在python2中,如果我想打印像:

print 'enrollment:' + str(len(enrollment))
print 'submissions:' + str(len(submissions))

我需要输出标题和长度;试图格式化:

print ('%d:' + str(len('%d'))) %enrollment

给了我:

  

" TypeError:%d format:需要一个数字,而不是dict"

BTW"注册"和"提交"是变量存储字典

有没有办法为字符串和变量名称应用占位符?

2 个答案:

答案 0 :(得分:0)

我认为您可能正在寻找以下内容:

>>> enrollment = {'a':1,'b':2}
>>> submissions = {'a':1,'b':2,'c':3}
>>> for x in ['enrollment','submissions']:
...     print('%s: '+str(len(eval(x)))) % x
...
enrollment: 2
submissions: 3

请注意,这里给定迭代x的字典实际上是字典的名称作为字符串,eval用于获取字典以进行计数< / p>

还应该注意的是,使用eval通常不赞成 - 如果传递给此函数的字符串是有效的python代码,它将被执行 - 所以如果传入的字符串来自例如用户输入,用户可能会运行您不想运行的代码。在这种情况下,字符串在您自己的代码中是硬编码的,但它应该没问题。

答案 1 :(得分:0)

通常,如果您需要一个名称与对象永久关联,那么您应该使用字典,而不是尝试从对象回溯到变量名称。它需要一些设计思想,但如果你真的需要这种关联,那么值得去做,例如:

coll = {'enrollment' : {'k1':'v1','k2':'v2', 'k3':None},
        'submissions': {...}}

for key, val in coll.items():
    print '%s: %d' % (key, len(val))

这避免了eval,这通常不赞成:Why is using 'eval' a bad practice?