繁体   English   中英

Python:在Django中编码/解码字符串

[英]Python: encode/decode a string in Django

如果我有一个字符串FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l (采用这种格式),我需要转换为仅包含数值[0-9]的较短字符串,以便可以将其作为URL中的唯一数字我的Django专案。

因此该字符串应转换为类似324982984829 (长度可以长短也可以长短,无所谓,只要它全是数字)。 解码324982984829应该使我回到FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l

最终数值对于每个唯一的字符串都应该是唯一的。

有什么办法吗?

尝试双向字典 ,这是完成该任务的好方法。 一个工作示例如下所示:

class TwoWayDict(dict):
    def __setitem__(self, key, value):
        # Remove any previous connections with these values
        if key in self:
            del self[key]
        if value in self:
            del self[value]
        dict.__setitem__(self, key, value)
        dict.__setitem__(self, value, key)

    def __delitem__(self, key):
        dict.__delitem__(self, self[key])
        dict.__delitem__(self, key)

    def __len__(self):
        """Returns the number of connections"""
        # The int() call is for Python 3
        return int(dict.__len__(self) / 2)

d = TwoWayDict()
for i in range(10):
    d["FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l"+str(i)] = str(i)



for i in range(10):
    print d['FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l'+str(i)], "<->", d[str(i)]

当然,您也可以使用任何其他数字哈希。

暂无
暂无

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

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