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

时间:2017-02-23 14:39:38

标签: python dictionary

我的字典看起来像这样:

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

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

类似的东西:

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

您对如何实现这一点有什么建议吗?谢谢

1 个答案:

答案 0 :(得分:0)

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)这样的密钥。但这应该让你开始。