Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将一个模块中的字典名称转换为另一个模块中的字典键?_Python_Dictionary_Import_Transpose - Fatal编程技术网

Python 如何将一个模块中的字典名称转换为另一个模块中的字典键?

Python 如何将一个模块中的字典名称转换为另一个模块中的字典键?,python,dictionary,import,transpose,Python,Dictionary,Import,Transpose,我有一组属于用户的值,这些值将是给定函数的参数。我将对多个组进行比较,每个组都有自己的一套假设——大约80%的时间它们是公共变量(虽然不是值本身) 我将比新用户更频繁地添加一个新变量,因此我更愿意将数据打包为每个变量的字典 如何最好地遍历假设数据为给定用户编译词典 换句话说,从这里: 假设。py var_x = {'user_1': 10, 'user_2': 15, 'user_3': 12} var_y = {'user_1': 1000, 'user_3': 950} # nothin

我有一组属于用户的值,这些值将是给定函数的参数。我将对多个组进行比较,每个组都有自己的一套假设——大约80%的时间它们是公共变量(虽然不是值本身)

我将比新用户更频繁地添加一个新变量,因此我更愿意将数据打包为每个变量的字典

如何最好地遍历假设数据为给定用户编译词典

换句话说,从这里:

假设。py

var_x = {'user_1': 10, 'user_2': 15, 'user_3': 12}
var_y = {'user_1': 1000, 'user_3': 950}   # nothing for user_2
var_z = {'user_1': 3, 'user_2': 2, 'user_3': 3}
user = 'user_2'
<transpose>
user_dict = {'var_x':15, 'var_y':None, 'var_z':2}
到这里:

foobar.py

var_x = {'user_1': 10, 'user_2': 15, 'user_3': 12}
var_y = {'user_1': 1000, 'user_3': 950}   # nothing for user_2
var_z = {'user_1': 3, 'user_2': 2, 'user_3': 3}
user = 'user_2'
<transpose>
user_dict = {'var_x':15, 'var_y':None, 'var_z':2}
user='user_2'
user_dict={'var_x':15,'var_y':无,'var_z':2}
如有任何建议,将不胜感激。谢谢。

我想您需要的是
收藏
模块

这里有一个例子

from collections import defaultdict

# you must use `lambda` here as using just `None` will result with
# KeyError on undefined keys
fund_dict = defaultdict(lambda: None, {'assume01':15, 'assume03':2})
print fund_def['assume01']  # outputs 15
print fund_def['assume02']  # outputs None
print fund_def['assume03']  # outputs 2

以下是一种将多个词典链接在一起的方法(一个具有默认值,另一个具有更新的假设):

有关更完整的字典接口,请参见init.py#l754“>http://hg.python.org/cpython/file/ab5d39caad6f/Lib/collections/init.py#l754

ChainMap类可以这样使用:

base_assumptions = dict(a1=10, a2=15, a3=30)

class FundClass:
    def __init__(self, fund, investor_assumptions)  #dict to be unpacked via '**' when passed
        combined_dict = ChainMap(investor_assumptions, base_assumptions)
        self.some_var = combined_dict['a1']

假设假设假设与脚本位于同一目录中

import assumptions
fund = "..."
fund_dict = {}
for d in dir(assumptions):
    element = eval("assumptions." + d)
    if isinstance(element, dict) and d[6:] == "assume": # in case there are other dictionaries in the file
        if fund in element:
            fund_dict[d] = element[fund]
        else:
            fund_dict[d] = None

# using your example:
# print fund_dict prints {'assume01': 15, 'assume02': None, 'assume03': 2}

啊!这就是我一直试图做的。我试图通过
模块引用假设模块。object
方法,但没有使用
eval
,因此得到了一个错误,即在
假设中找不到迭代变量。我到家后将尝试。谢谢!这是一个巧妙的方法。我唯一关心的是它是否可以在不直接编辑文件的情况下进行扩展。新的
假设..
变量经常会弹出,我需要添加这些变量。我对编程还是很陌生,但我希望将这个
假设
模块合并到GUI环境中进行假设编辑,我不知道字典是否可以修改另一个字典中的dded将影响该功能。我将尝试它。非常感谢。@DolphinTsar将数据和程序逻辑分开是很好的。假设是数据,但变量定义是程序逻辑的一部分