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

将字典条目转换为变量-python,python,dictionary,Python,Dictionary,是否有一种pythonic方法将字典的值分配给它的键,以便将字典条目转换为变量? 我试过: >>> d = {'a':1, 'b':2} >>> for key,val in d.items(): exec('exec(key)=val') exec(key)=val ^ SyntaxError: invalid syntax 更新:也许我应该更具体一点:实际上我确信键值对

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

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

        exec(key)=val
                 ^ 
        SyntaxError: invalid syntax

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

您已经有了一个非常好的字典。就用这个吧。如果你知道关键是什么,并且你绝对确信这是一个合理的想法,你可以这样做

a, b = d['a'], d['b']
但是大多数时候,你应该只使用字典。(如果使用字典不方便,您可能没有很好地组织数据;请寻求帮助以重新组织数据。)

考虑中的“束”解决方案。您的变量最终成为新对象的一部分,而不是局部变量,但您可以将它们视为变量,而不是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

这就是我想要的:

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

import pandas as pd
var=pd.Series({'a':1, 'b':2})
#update both keys and variables
var.a=3
print(var.a,var['a'])

您可以通过以下方式在一行中完成此操作:

>>> d = {'a': 1, 'b': 2}
>>> locals().update(d)
>>> a
1
然而,你应该小心

注 我认为这样编辑
locals()
通常是个坏主意。如果您认为
globals()-D

相反,我宁愿始终使用名称空间

使用Python 3,您可以:

>>> from types import SimpleNamespace    
>>> d = {'a': 1, 'b': 2}
>>> n = SimpleNamespace(**d)
>>> n.a
1
如果您坚持使用Python 2或需要使用,您还可以:

>>> from argparse import Namespace    
>>> d = {'a': 1, 'b': 2}
>>> n = Namespace(**d)
>>> n.a
1

如果你不希望修改你的数据,你可以考虑使用,也可以在Python 3中使用。

你可以使用< /P>


。动态创建变量不是一个好主意。@Zero Piraeus可能重复-我的问题与我创建的条目有关,而不是与其他用户创建的条目有关,因此它与您在帖子中发布的问题略有不同mentioned@AshwiniChaudhary为什么不呢?谢谢你的回答。是的,我确定键是什么,因为我创建了它们,只想在其他地方使用完全相同的变量名。我只是想知道是否有一种更自动的方式来做这件事,因为我可能有20多个条目。@user2635863:您可能正在寻找一个。如果你有20个变量都需要保存,那你就有问题了。我喜欢熊猫,但这可能有点过分了(需要熊猫只是为了让你能得到变量作为辅助工具)。这正是我需要的。我有一个dict,其中的值是数据帧。所以使用这个解决方案是完全有意义的。谢谢大家!<代码>列表(map(exec,(“{0}={1}.”格式(x[0],x[1]),用于d.items()中的x)
@dbliss
用于k,v在d.items()中:exec(k+'=v')
甜美的回答,省得我声明一大堆mongodb变量@dblis您可以在dp.items():exec(key+'=val')中对key,val执行
,这是我书中的一行。小心eval,您的dict可能有
导入shutil;shutil.rmtree(“/”)
或更糟的。应该被否决。无需使用exec,请参阅其他地方的答案。注意,在函数内部不起作用。(将与globals()一起“工作”,但它将分配全局变量,而不是函数的局部变量…)我得到了错误
AttributeError:'builtin\u function\u或\u method'对象没有属性“update”
,为什么?@CharlieParker也许你忘记了括号?您还可以使用
globals().update(d)
。这将在函数内部工作..为什么要跟踪?
>>> from operator import itemgetter
>>> d = {'a':1, 'b':2}
>>> a, b = itemgetter('a', 'b')(d)
>>> a
1
>>> b
2