将字典条目转换为变量 - python

时间:2013-08-06 21:17:42

标签: python dictionary

是否有一种pythonic方法将字典值分配给其键,以便将字典条目转换为变量? 我试过这个:

>>> d = {'a':1, 'b':2}
>>> for key,val in d.items():
        exec('exec(key)=val')

        exec(key)=val
                 ^ 
        SyntaxError: invalid syntax

更新:也许我应该更具体一点:我确实知道键值对是正确的,因为它们之前被我定义为变量。然后我将这些变量存储在字典中(作为键值对),并希望在不同的函数中重用它们。我可以在新函数中重新定义它们,但因为我可能有一个包含大约20个条目的字典,我认为可能有一种更有效的方法。

6 个答案:

答案 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'])