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

时间:2014-05-25 22:01:10

标签: python django string encoding

如果我有一个字符串FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l(以这种格式),我需要转换为一个由数值[0-9]组成的较短字符串,所以我可以把它作为一个唯一的数字放在我的URL中Django项目。

因此,字符串应该转换为类似324982984829的字符串(可以是更高或更低的长度,只要它都是数字就无关紧要)。解码324982984829会让我回到FOOBAR-efkem4x-dnj3mn-efjn2j-lf4m2l

每个唯一字符串的结束数值应该是唯一的。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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)]

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