社区
脚本语言
帖子详情
python中如何把一个长字符串 映射为 一个短字符串
z752964360
2010-12-31 12:26:31
比如吧30位的字符串映射为 20位的 而且是 唯一的,就像单项散列!
...全文
513
15
打赏
收藏
python中如何把一个长字符串 映射为 一个短字符串
比如吧30位的字符串映射为 20位的 而且是 唯一的,就像单项散列!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iambic
2010-12-31
打赏
举报
回复
永动机后的另一个神话就是无限压缩算法。
fibbery
2010-12-31
打赏
举报
回复
用算法来算的话,想做到纯粹的唯一,恐怕不太可能。
如果30位字符串的数量不超过20位字符串所表示的数量的话,可以直接建立映射表,这样也简单。
feilniu
2010-12-31
打赏
举报
回复
参考hashlib。
不过LZ要考虑想要的是字符串还是字节流。
单向hash函数,md5返回16字节,sha1返回20字节,如果用hex字符串形式表示,分别是32个字符和40个字符。
shyokou
2010-12-31
打赏
举报
回复
前提是来源于单项散列, 就不会 "简单" "重复" 啦, 而且实现起来最快啦, 以至于 很懒很粗暴 ;-)
[Quote=引用 9 楼 z752964360 的回复:]
引用 7 楼 shyokou 的回复:
如果从上方下来的是来源于单项散列, 也可以简单地将 "30位" 截断到 "20位" 直接用的 ...
引用 4 楼 z752964360 的回复:
纯粹唯一 肯定是不可能的,其实我在做一个腾讯平台的接入,腾讯吧QQ号捂得很死,不会直接给你,给你一个“openid” 近30个字符 ,我们的数据库 id 就20字符长,要改的话,涉及……
[/Quote]
z752964360
2010-12-31
打赏
举报
回复
帅 哥说的对!多谢
fibbery
2010-12-31
打赏
举报
回复
节省程序员的时间成本,比耗费程序员的时间成本提高机器运行成本,更加值得,而且,在没有实践的情况下,很难断定孰优孰劣。值得权衡一下。
fibbery
2010-12-31
打赏
举报
回复
[Quote=引用 8 楼 z752964360 的回复:]
映射表如何建立?python 中有没有现成的库?
是不是自己在数据库里建立一个新表?
每次解析出openid后和映射的id存入这个新表,以后每次解析的时候再次查找表。
加了这些操作,性能上损失很大?
[/Quote]
计算一个映射,不见得有一个查表操作快。除非你不建立索引,进行全表扫描。
另外,也可以根据程序的具体实现,将该表以哈希表的方式保存在内存中。
fibbery
2010-12-31
打赏
举报
回复
建立一个数据库表,字段至少包括:openid, ownid,其中ownid为你们的20位字符串id。
每得到一个openid,就向该表插入一行数据,生成ownid,在使用时,可以直接从该表进行查找。建议这两个字段均建立唯一索引,方便正向逆向查找换算。
z752964360
2010-12-31
打赏
举报
回复
[Quote=引用 7 楼 shyokou 的回复:]
如果从上方下来的是来源于单项散列, 也可以简单地将 "30位" 截断到 "20位" 直接用的 ...
引用 4 楼 z752964360 的回复:
纯粹唯一 肯定是不可能的,其实我在做一个腾讯平台的接入,腾讯吧QQ号捂得很死,不会直接给你,给你一个“openid” 近30个字符 ,我们的数据库 id 就20字符长,要改的话,涉及的表都要改~所以想写个映射。
[/Quote]
截断的话,简单粗暴! 很可能重复!
z752964360
2010-12-31
打赏
举报
回复
映射表如何建立?python 中有没有现成的库?
是不是自己在数据库里建立一个新表?
每次解析出openid后和映射的id存入这个新表,以后每次解析的时候再次查找表。
加了这些操作,性能上损失很大?
shyokou
2010-12-31
打赏
举报
回复
如果从上方下来的是来源于单项散列, 也可以简单地将 "30位" 截断到 "20位" 直接用的 ...
[Quote=引用 4 楼 z752964360 的回复:]
纯粹唯一 肯定是不可能的,其实我在做一个腾讯平台的接入,腾讯吧QQ号捂得很死,不会直接给你,给你一个“openid” 近30个字符 ,我们的数据库 id 就20字符长,要改的话,涉及的表都要改~所以想写个映射。
[/Quote]
feilniu
2010-12-31
打赏
举报
回复
[Quote=引用 4 楼 z752964360 的回复:]
纯粹唯一 肯定是不可能的,其实我在做一个腾讯平台的接入,腾讯吧QQ号捂得很死,不会直接给你,给你一个“openid” 近30个字符 ,我们的数据库 id 就20字符长,要改的话,涉及的表都要改~所以想写个映射。
[/Quote]
这种情况还是建立映射表吧。直接每为一个openid生成一个对应的数据库id。
iambic
2010-12-31
打赏
举报
回复
这要看openid的字符集了。如果只是ascii可见字符就很简单。
z752964360
2010-12-31
打赏
举报
回复
纯粹唯一 肯定是不可能的,其实我在做一个腾讯平台的接入,腾讯吧QQ号捂得很死,不会直接给你,给你一个“openid” 近30个字符 ,我们的数据库 id 就20字符长,要改的话,涉及的表都要改~所以想写个映射。
Python
47个
字符串
方法
#
Python
47个
字符串
方法## 课程介绍同学们是否总是要搜资料、查官网后,才知道怎么操作
字符串
?如果是,来学学本课程吧,本课程以讲解官网文档的方式,讲解
Python
47个
字符串
方法,涉及替换、删除、连接、查找、...
关于
python
中
的
字符串
映射
转换
关于
python
中
的
字符串
映射
转换 利用
Python
字符串
映射
的方式来快速准确对
Python
字符串
中
对应的
字符串
进行替换,方法主要有两种: 第一种:maketrans方法 maketrans方法的参数主要有两个,第
一个
表示待替换的源
字符串
,第二个参数表示对应满足
映射
关系的目标
字符串
,不过两个
字符串
必须满足
长
度相同,同时还隐含有第三个参数,为对应的要删除的
字符串
例: remap = str.maketrans("bad", "fun") text = '
Python
is bad' ans = text.t
Python
字符串
操作集锦之
字符串
映射
表
14、
字符串
的
映射
(mapping)
字符串
的
映射
中
,包含两个函数maketrans()和translate(),并且通常是这两个函数配合使用 。这两函数都是string
中
的模块,所以使用前需要导入string包。string.maketrans(from, to) 返回
一个
256个字符组成的
映射
表,其
中
from
中
的字符被一一对应地转换成to,所以from和to必须是等
长
的,返回
一个
映射
表。
【
Python
教程】删除
字符串
中
字符的四种方法
一、删除
字符串
两端的一种或多种字符 #strip()、lstrip()、rstrip()方法;(默认删除空格符) A、list.strip(字符):删除
字符串
两端的一种或多种字符; 例:删除
字符串
s两端 a 或 b 或 c 字符; s = 'abbmmmcccbbb' s1 = s.strip('abc') print(s1) #输出:mmm B、list.lstrip(字符):删除
字符串
左端的一种或多种字符; C、list.rstrip(字符):删除
字符串
右端的一种或多种字符; 二、删除
字符串
中
单个固
脚本语言
37,718
社区成员
34,238
社区内容
发帖
与我相关
我的任务
脚本语言
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
复制链接
扫一扫
分享
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
试试用AI创作助手写篇文章吧
+ 用AI写文章