美文网首页Python全栈工程师
19.1-字典扁平化和base64编码实现

19.1-字典扁平化和base64编码实现

作者: BeautifulSoulpy | 来源:发表于2019-09-19 10:37 被阅读0次

一个人最稀缺的机会就是选择的机会,当你还有能力和意愿做出选择的时候,我劝你一定不要迟疑。

人生中关键的选择节点并不多,如果有可能,那你就一定要跳出舒适区,追求一下自己想要的生活。如果你不想等老了后悔,那就一定要珍惜选择的机会。

相比于因为生活不如意带来的的持续痛苦,我还是劝你选择改变带来的阵痛。

递归不一定没有效率,看你怎么写!
处理递归问题的套路:

本章总结:

1.简化问题,拆分问题;递归的解决方案、扁平化解决方案;
2.弄懂base64,就懂字符、字节编码问题;
3.位运算是效率非常非常高的方法,

练习1:扁平化一个字典

raw_dict = {'a':{'b':1,'c':2}, 'd':{'e':3, 'f':{'g':4}}}
target_dict = {'a.c':2, 'd.e':3, 'd.f.g':4, 'a.b':1} 

# 递归问题套路:

src = {'a':{'b':1,'c':2}, 'd':{'e':3, 'f':{'g':4}}}
target = {}

def flatmap(src:dict,prefix=''):   # 'a':{'b':1,'c':2}
    
    for k,v in src.items():
        if isinstance(v,(dict,)):
            prefix = prefix + k + '.'
            flatmap(v, prefix)
        else:
            target[prefix + k] = v
    return target
    
print(flatmap(src))
-----------------------------------------------------
{'a.b': 1, 'a.c': 2, 'a.d.e': 3, 'a.d.f.g': 4}

正确解法:
src = {'a':{'b':1,'c':2}, 'd':{'e':3, 'f':{'g':4}}}
def flatmap(src:dict):
    target = {}
    def _flatmap(src:dict,prefix=''):   # 'a':{'b':1,'c':2}
        #target = {}
        for k,v in src.items():
            if isinstance(v,(dict,)):
                prefix = prefix + k + '.'
                _flatmap(v, prefix)
                prefix = ''
            else:
                target[prefix + k] = v
    _flatmap(src)
    return target

print(flatmap(src))
-------------------------------------------------------------------------
{'a.b': 1, 'a.c': 2, 'd.e': 3, 'd.f.g': 4}

base64原理简介

base64可以理解为一种加密算法,用64个常见字符来表示8字节的二进制数字。

64符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

base64转换后的结果只会出现这64个字符,这也是base64名字的由来。(由于不同的应用场景,当+或/有特殊含义时,这两个字符被换成了其他字符,那属于base64的变种)。

那64个字符怎么表示8字节的二进制数字呢?

首先,上面的64个字符按顺序分别对应了十进制数字的0到63,可以理解为上面的字符串的索引。

其次,因为一个8位二进制数字转换为十进制后表示的是0到255。所以base64会物理上将3个8位(38=24位)的二进制数据连在一起,然后切分成4个6位(46=24位)的二进制数据,然后再在这4个6位二进制数据的前面都补两个0,补满8位。这样处理后的二进制数字转换为十进制后表示的是0到63。

这刚好与上面的0到63个字符对应。可以参考下面的图片。


对于需要加密的内容,base64都会先将其转换为8位的二进制数据,然后进行上面的处理。

练习2:实现Base64编码:

要求自己实现算法,不用库;

相关文章

  • 19.1-字典扁平化和base64编码实现

    一个人最稀缺的机会就是选择的机会,当你还有能力和意愿做出选择的时候,我劝你一定不要迟疑。 人生中关键的选择节点并不...

  • Base64

    Base64简介 Base64 原理解析 编码实现 Base64简介 命令行运行base64编码和解码 对文件操作...

  • 编码与加密

    一、阅读基础 1、基础 一、Base64编码与解码 2、原理 4、代码实现 Base64编码 Base64解码 二...

  • Base64 之 JavaScript 实现

    相关文章:一步到位 Base64 编码在Web前端还可以这样实现Base64 JavaScript 实现 Base...

  • base64 编码原理

    近期接触AI图片识别,图片转码,从而接触到base64编码原理。为后续实现此编码原理,先学习了解~ base64编...

  • iOS URL安全的Base64编码、解码

    参考iOS开发探索-Base64编码iOS URL编码&base64编码URL安全的Base64编码,解码 为什么...

  • Kubernetes ( K8S ) 将 Secret 设置为环

    1.生成Base64编码的用户密码 2.创建保密字典 ( Secret ) 2.1创建 Secret 2.2.查...

  • BASE64 编码简析

    Base64编码: <1>·Base64编码简介: <2>·使用Base64的原因: <3>·编码原理: 成这个字...

  • SMTP整理

    账号:BASE64编码的账号 密码:BASE64编码的密码 快速BASE64编码网址: http://tools....

  • 关于base64编码Encode和Decode编码的几种方式

    Java如何进行Base64的编码(Encode)与解码(Decode) 关于base64编码Encode和Dec...

网友评论

    本文标题:19.1-字典扁平化和base64编码实现

    本文链接:https://www.haomeiwen.com/subject/erpkuctx.html