【问题标题】:Import a dictionary into the current scope as variables将字典作为变量导入当前范围
【发布时间】:2011-03-03 18:43:15
【问题描述】:

我有一个 .mat 文件,其中放置了之前处理过的数据。当我表演时

dict = scipy.io.loadmat('training_data.mat')

我得到一个像这样的字典

{'encoders' : ......, 'decoders' : ........, 'stuff' : .....}

我想有选择地将 encodersdecoders 变量导入我当前的作用域。效果一样:

encoders = dict['encoders']
decoders = dict['decoders']

如何在不输入 10-15 行的情况下干净地完成此操作?

【问题讨论】:

    标签: numpy python scipy


    【解决方案1】:

    您可以使用将字典 d 导入全局范围

    globals().update(d)
    

    对于本地范围来说,同样的事情是不可能的,因为修改 locals() 返回的字典会导致未定义的行为。

    在这种情况下,您可以使用的一个小技巧是将名称导入动态创建类型的字典中:

    d = {"encoders": 1, "decoders": 2}
    t = type("", (), d)
    print t.encoders
    print t.decoders
    

    这至少会比使用d["decoders"] 等方便一些。

    或者,您可以使用exec 语句来创建变量:

    d = {"encoders": 1, "decoders": 2}
    for k, v in d.iteritems():
        exec k + " = v"
    

    这也可以选择性地完成。

    【讨论】:

    • 我相信你实际上想要 locals() 而不是 globals() 因为他指定了当前范围。 locals().update(d)
    • @John:正如我在回答中已经指出的那样,不支持修改 locals() 返回的字典 - 只需在文档中查找即可。
    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2012-10-15
    相关资源
    最近更新 更多