Discuss / Python / 写下理解以免之后忘了

写下理解以免之后忘了

Topic source

ChainMap的作用是对多个字典dict进行链接emm简单来说就是把几个字典绑在了一起变成一个所有字典总和的大字典,但是注意这不等同于拼接!跟普通的字典拼接相比最主要的区别就是这个大字典里能保存一样的键key!当你用被重复的key去访问Value的时候得到的一定是在大字典里位置靠前的Value,被链接起来的字典会因为排序不同而产生优先级!

from collections import ChainMap
import os, argparse

defaults = { 'color': 'red', 'user': 'guest'}  # 默认参数-字典

parser = argparse.ArgumentParser()  # 参数解析器,不懂的暂时也不用去管了
parser.add_argument('-u', '--user')  # 配置解析器,
parser.add_argument('-c', '--color')  # 同上,↑记住 ’-u‘ 这两个字符就ok
namespace = parser.parse_args()  # 运行解析器了

command_line_args = { k: v for k, v in vars(namespace).items() if v }  #  命令行参数-字典
# 将解析器分成了无数个小部分并用字典生成器重做成一个保存有解析器信息的字典
# { k: v for k, v in vars(namespace).items() if v }是字典生成器
# vars(namespace).items() #vars获取namespace解析器属性并以dict形式返回,items()将dict转为list

combined = ChainMap(command_line_args, os.environ, defaults)  # 绑着三个字典的“大字典”
# 用ChainMap 链接3字典,分别是:命令行参数-字典、环境变量参数-字典、默认参数-字典
# 命令行参数-字典 在最前位置具有最高优先级,默认参数-字典 优先级最低

print('color=%s' % combined['color'])  # 打印大字典combined['color']对应的value
print('user=%s' % combined['user'])  # 打印......
# 按优先级查找combined['color']...最先在命令行参数-字典里查找对应的key,没有找到...再在环境变量里找,还没找到...最后去默认参数里找,找到了!打印defaults['color']

# 命令行参数、环境变量可以且只能在cmd里添加的...这一节只是讲ChainMap的拓展用法,实际上很少用到不清楚也没事

Counter的本质还是字典,所以。。一个简单示例:

c = Counter('aababc')
print(c)
#输出:#{'a':3,'b':2,'c':1}
# 一个记录key重复次数的字典?emmm

原文改一下应该更容易理解:
for ch in 'programming':
     x = c[ch]
     x += 1


  • 1

Reply