在python2中,如果我想打印像:
print 'enrollment:' + str(len(enrollment))
print 'submissions:' + str(len(submissions))
我需要输出标题和长度;试图格式化:
print ('%d:' + str(len('%d'))) %enrollment
给了我:
" TypeError:%d format:需要一个数字,而不是dict"
BTW"注册"和"提交"是变量存储字典
有没有办法为字符串和变量名称应用占位符?
答案 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?