繁体   English   中英

python:使用字典键的一部分作为字典值的变量

[英]python: Use part of dict key as variable for dict value

我有这样的字典:

mapper = {
    "bigint(20)": "= Column(BigInteger)",
    "int(11)": "= Column(Integer)",
    "`": "",
    "varchar(255)": "= Column(String)",
}

我将命名为sqlalchemy的sql数据类型映射为要替换为文本文件。 到目前为止,我只是将int映射为整数,将varchar映射为字符串,依此类推。 但是,我的想法是使用键的一部分作为变量传递给它的相对值,即避免硬编码varchar(255)并使用varchar(x)传递给它的相对值= Column(String())具有= Column(String(x))

就像是:

"varchar(x)": "= Column(String{})".format(x),

您对实现该目标有什么建议吗? 谢谢

dict是一组固定的具体密钥。 你不能仅凭dict就做自己想做的事。

但是,您可以对dict进行子类化以提供__getitem__的定义,该定义可以执行您想要的操作。 就像是

import re
class SQLDict(dict):
    def __getitem__(self, key):
        m = re.match('^varchar\((.*)\)$', key)
        if m:
            return super(SQLDict, self).__getitem__('varchar(x)') % (m.group(1),)
        else:
            return super(SQLDIct,self).__getitem__(key)

mapper = SQLDict({
    "bigint(20)": "= Column(BigInteger)",
    "int(11)": "= Column(Integer)",
    "`": "",
    "varchar(x)": "= Column(String(%s))",
})

尝试一下...

>>> print mapper['varchar(15)']
'=Column(String(215))'

这并不完美; 我已经将varchar(x)硬编码到__getitem__的定义中,而您可能会定义mapper以使用像varchar(y)这样的键。 但这应该可以帮助您入门。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM