在python2中,如果我想打印如下内容:
print 'enrollment:' + str(len(enrollment))
print 'submissions:' + str(len(submissions))我需要输出标题和长度;尝试格式化:
print ('%d:' + str(len('%d'))) %enrollment这给了我:
"TypeError:%d格式:需要一个数字,而不是dict“
顺便说一下,“注册”和“提交”都是存储字典的变量。
是否有一种为字符串和变量名称应用占位符的方法?
发布于 2018-01-11 16:07:21
我想你也许是在寻找如下的东西:
>>> 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编辑的,以获得用于计数的字典。
还应该注意的是,通常不赞成使用eval --如果传入该函数的字符串是有效的python代码,它将被执行--因此,如果传入的字符串来自例如用户输入,用户可能会运行您不希望被运行的代码。在这种情况下,字符串是在您自己的代码中硬编码的,但是应该是可以的。
发布于 2018-01-11 16:26:05
通常,如果需要名称与对象永久关联,则应该使用字典,而不是尝试从对象返回到变量名称。它需要一些设计思想,但如果您确实需要这种关联,则值得这样做,例如:
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?
https://stackoverflow.com/questions/48211105
复制相似问题