Python字典简单添加新键值对的方法

1 投票
7 回答
18214 浏览
提问于 2025-04-15 15:56

假设你有了这个:

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]

我看不出你提到的 de 之间有什么区别:它们都把 '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)

这其实是你问题中提到的字典操作的一个特殊情况。

我觉得没有办法避免这种情况,除非使用一些“魔法”技巧,所以你可能得接受这个现象。

撰写回答