给定Python中的变量名列表,如何创建一个以变量名作为键(指向变量值)的字典?

发布于 2021-01-29 16:54:23

我有一个变量名列表,像这样:

['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'])
关注者
0
被浏览
212
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    忘记过滤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'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看