Python字典简单添加新键值对的方法
假设你有了这个:
foo = 'bar'
d = {'a-key':'a-value'}
而你想要的是:
d = {'a-key':'a-value','foo':'bar'}
e = {'foo':foo}
我知道你可以这样做:
d['foo'] = foo
#Either of the following for e
e = {'foo':foo}
e = dict(foo=foo)
但是,在所有这些把变量 foo 加入字典的方法中,我都得用到 foo
这个词两次;一次是作为键,另一次是作为值。
我觉得这样用 foo
两次有点浪费。有没有更简单的方法,可以告诉 Python “把这个变量加到字典里,用它的名字作为键,用它的值作为值”?
7 个回答
2
你可以使用:
name = 'foo'
d[name] = vars[name]
我看不出你提到的 d
和 e
之间有什么区别:它们都把 'foo' 设置为 foo 的值。
如果你想把这个放进一个函数里,那就复杂一些了:
def add_variable(d, name):
# blah
因为那样的话,它需要用 inspect
来开始查看调用栈中的内容。
这听起来像是一个更大的问题,如果你能跟我们详细描述一下,可能会有更好的解决办法。例如,如果问题不仅仅是关于 foo,而是涉及到一大堆局部变量,那么你可能想要这样的:
d.update(locals())
这将把所有局部变量的名称和值复制到 d
中。
4
你可以这样做
def add_dry_foo(d, namespace, fooName):
d[fooName] = namespace[fooName]
foo = 'oh-foo'
d = {}
add_dry_foo(d, locals(), 'foo')
print d
2
其实在Python程序中,使用foo
两次是非常常见的。这种用法经常出现在传递参数的时候,比如:
def f(foo, bar):
g(foo=foo)
这其实是你问题中提到的字典操作的一个特殊情况。
我觉得没有办法避免这种情况,除非使用一些“魔法”技巧,所以你可能得接受这个现象。