是否有一种pythonic方法将字典值分配给其键,以便将字典条目转换为变量? 我试过这个:
>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
exec('exec(key)=val')
exec(key)=val
^
SyntaxError: invalid syntax
更新:也许我应该更具体一点:我确实知道键值对是正确的,因为它们之前被我定义为变量。然后我将这些变量存储在字典中(作为键值对),并希望在不同的函数中重用它们。我可以在新函数中重新定义它们,但因为我可能有一个包含大约20个条目的字典,我认为可能有一种更有效的方法。
答案 0 :(得分:52)
你可以用以下单行完成:
>>> d = {'a': 1, 'b': 2}
>>> locals().update(d)
>>> a
1
但是,您应该注意how Python may optimize locals/globals access when using this trick。
我认为像这样编辑locals()
通常是一个坏主意。如果您认为globals()
是一个更好的选择,那么请考虑两次! :-D
相反,我宁愿总是使用命名空间。
使用Python 3,您可以:
>>> from types import SimpleNamespace
>>> d = {'a': 1, 'b': 2}
>>> n = SimpleNamespace(**d)
>>> n.a
1
如果你遇到Python 2,或者你需要使用some features missing in types.SimpleNamespace
,你还可以:
>>> from argparse import Namespace
>>> d = {'a': 1, 'b': 2}
>>> n = Namespace(**d)
>>> n.a
1
如果您不希望修改数据,也可以考虑使用Python 3中提供的collections.namedtuple
。
答案 1 :(得分:28)
这就是我想要的:
>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
exec(key + '=val')
答案 2 :(得分:10)
你已经拥有一本非常好的词典。只是使用它。如果你知道键是什么,并且你绝对相信这是一个合理的想法,你可以做类似
的事情。a, b = d['a'], d['b']
但大多数时候,你应该只使用字典。 (如果使用字典很笨拙,您可能没有很好地组织数据;请求帮助重新组织它。)
答案 3 :(得分:5)
考虑Python: load variables in a dict into namespace中的“束”解决方案。您的变量最终成为新对象的一部分,而不是本地,但您可以将它们视为变量而不是dict条目。
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
d = {'a':1, 'b':2}
vars = Bunch(d)
print vars.a, vars.b
答案 4 :(得分:1)
您可以使用operator.itemgetter
>>> from operator import itemgetter
>>> d = {'a':1, 'b':2}
>>> a, b = itemgetter('a', 'b')(d)
>>> a
1
>>> b
2
答案 5 :(得分:0)
使用pandas:
import pandas as pd
var=pd.Series({'a':1, 'b':2})
#update both keys and variables
var.a=3
print(var.a,var['a'])