簡體   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