1. import collections
  2. import re
  3.  
  4. WORD_RE = re.compile(r'\w+')
  5.  
  6. index = collections.defaultdict(list) #用list方法作为默认工厂创建一个默认字典
  7. with open('xx.txt',encoding='utf-8') as fp:
  8. for line_no,line in enumerate(fp,1):
  9. for match in WORD_RE.findeiter(line):
  10. word = match.group()
  11. column_no = match.start()+1
  12. location = (line_no,column_no)
  13. index[word].append(location) # 如果index没有Word记录,会调用默认工厂,创建一个空列表
  14.  
  15. for word in sorted(index,key=str.upper):
  16. print(word,index[word])
  1. import collections
  2.  
  3. class StrKeyDict(collections.UserDict):
  4. def __missing__(self,key):
  5. if isinstance(key,str):
  6. raise KeyError(key)
  7. return self[str(key)]
  8. def __contains__(self,key):
  9. return str(key) in self.data
  10.  
  11. def __setitem__(self,key,item):
  12. self.data[str(key)] = item

不可变映射类型

  1. import collections
  2. from types import MappingProxyType
  3.  
  4. d = {1:'A'}
  5. d_proxy = MappingProxyType(d)
  6. d_proxy[1] # A
  7. d_proxy[2] #报错因为不可变
  8. d_proxy[2] = 'B' #{1:'A',2:'B'}

defaultdict使用及__missing__理解的更多相关文章

  1. python中defaultdict的用法

    初识defaultdict 之前在使用字典的时候, 用的比较随意, 只是简单的使用dict. 然而这样在使用不存在的key的时候发生KeyError这样的一个报错, 这时候就该defaultdict登 ...

  2. [译]Python面试中8个必考问题

    1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list list1 = extendList( ...

  3. Python 模块collections

    1.深入理解python中的tuple的功能 基本特性 # 可迭代 name_tuple = ('0bug', '1bug', '2bug') for name in name_tuple: prin ...

  4. Python 面试中 8 个必考问题(转载)

    Python 面试中 8 个必考问题 1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list ...

  5. 05-深入python的set和dict

    一.深入python的set和dict 1.1.dict的abc继承关系 from collections.abc import Mapping,MutableMapping #dict属于mappi ...

  6. 理解 Python 语言中的 defaultdict

    众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined).但是有时候,字典中的每个键都存在默认值是非常 ...

  7. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  8. 完全理解Python迭代对象、迭代器、生成器

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

  9. 理解Python迭代对象、迭代器、生成器

    作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...

随机推荐

  1. [USACO12FEB]Nearby Cows

    题意 给出一棵n个点的无根树,每个点有权值,问每个点向外不重复经过k条边的点权和 题解 设f[i][j]表示所有离i节点距离为j的点权和,v为它周围相邻的点,t为v的个数,则 j > 2 f[i ...

  2. c++面试遇到问题

    1. C 和 C++ 区别      2. const 有什么用途     主要有三点: 1:定义只读变量,即常量 2:修饰函数的参数和函数的返回值 3: 修饰函数的定义体,这里的函数为类的成员函数, ...

  3. sudo解决方案企业级应用实战

    visudo 编辑sudo配置文件 which  查找命令所在路径 例:touch /etc/oldboy.txt  没证件 sudo touch /etc/oldboy.txt  可以 内置命令没路 ...

  4. 【MyBatis源码分析】插件实现原理

    MyBatis插件原理----从<plugins>解析开始 本文分析一下MyBatis的插件实现原理,在此之前,如果对MyBatis插件不是很熟悉的朋友,可参看此文MyBatis7:MyB ...

  5. 如何用JAVA的IO流下载落网音乐?

    一直以来都特别喜欢落网的音乐,最近用JAVA写了一个小程序,可以根据期刊和歌曲编号去下载音乐.本程序仅供学习使用. 目前只写了一个初步的代码: public class DownloadMusic { ...

  6. PAT乙级-1036.跟奥巴马一起编程(15)

    题解 题解: 注意"行数是列数的50%(四舍五入)" #include<iostream> using namespace std; int main() { int ...

  7. Sharepoint Management Shell命令

    1.普通WSP包,没有特殊激活内容 安装BBA.WebParts.wsp 1)   Add-SPSolution -LiteralPath "c:\BBA.WebParts.wsp" ...

  8. 萌新关于C#委托一点见解

    开博第一写C#委托(一个简单的委托) 1.关于委托,一直是学习c#的萌新们的噩梦,小生也是.最近在学委托感觉瞬间被虐成狗,但作为C#中极为重要的一个内容,学好了将会及大地减少我们的代码量,而且这也是够 ...

  9. 第一把机械键盘 ikbc C-87

    终于入了机械键盘,ikbc C-87黑色红轴. 原本上周五晚上就到了,但是那个键盘有几个键弹起后弹簧会持续响,敲了一会,实在不能忍受,就申请换货了.新换的键盘今天终于到了,没有了之前的问题,但是几乎每 ...

  10. es6使用技巧

    ##1.通过参数默认值实现强制参数 ES6 的参数默认值只有在真正使用时才会求值.这可以让你强制确保提供参数: /** * Called if a parameter is missing and * ...