给定Python中的变量名列表,如何创建一个以变量名作为键(指向变量值)的字典?
我有一个变量名列表,像这样:
['foo', 'bar', 'baz']
(我最初询问如何转换变量列表。请参见下面的Greg Hewgill的答案。)
如何将其转换为字典,其中键是变量名(作为字符串),值是变量的值?
{'foo': foo, 'bar': bar, 'baz': baz}
现在我重新提出问题,我想到了:
d = {}
for name in list_of_variable_names:
d[name] = eval(name)
可以改善吗?
更新 ,回答为什么要这样做的问题(在评论中):
我经常发现自己使用%运算符对要插入的名称和值的字典进行字符串化。通常,字符串中的名称只是局部变量的名称。所以(用下面的答案)我可以做这样的事情:
message = '''Name: %(name)s
ZIP: %(zip)s
Dear %(name)s,
...''' % dict((x, locals()[x]) for x in ['name', 'zip'])
-
忘记过滤
locals()
!您提供给格式字符串的字典允许包含未使用的键:>>> name = 'foo' >>> zip = 123 >>> unused = 'whoops!' >>> locals() {'name': 'foo', 'zip': 123, ... 'unused': 'whoops!', ...} >>> '%(name)s %(zip)i' % locals() 'foo 123'
借助Python
3.6中的新f字符串功能,locals()
不再需要使用:>>> name = 'foo' >>> zip = 123 >>> unused = 'whoops!' >>> f'{zip: >5} {name.upper()}' ' 123 FOO'