think in python 11 字典
字典
字典类似于列表,但更加通用
键值对 ,字典是 键与值之间的映射,每个键都映射到一个值上
dict可以创建一个不包含任何项的字典
eng2sp = dict()
print eng2sp
还可以给字典添加新项
eng2sp['one']='SS'
print eng2sp
或者直接赋值
eng2sp = {
'one':'1',
'two':"2",
'three':"3"
}
print eng2sp
print eng2sp['one']
len可以用在字典上
print len(eng2sp)
如果一个键不在字典里面,输出就会报错,可以用in判断
print 'one' in eng2sp
使用字典作为计数器
比如计算每个字幕出现次数
def histogram(s):
d = dict()
for i in s:
if i in d:
d[i] +=1
else:
d[i] = 1
return d
w = histogram("brontosaurus")
循环和字典
如果在for循环中使用字典,会遍历字典的键
def print_hist(h):
for c in h:
print c,h[c]
print_hist(w2)
反向查找
给定一个字典d和键k,找到v是很容易的。 但是给定值v 通过v来查找k 就没那么简单了,因为很可能多个k的值是同一个。
初级版本:
def reverse_lookup(d,v):
for k in d:
if d[k]==v:
return k
raise ValueError
字典和列表
列表可以在字典中以值得形式出现
例如
def invert_dict(d):
inverse = dict()
for key in d:
val = d[key]
if val not in inverse:
inverse[val] = [key]
else:
inverse[val].append(key)
return inverse ```
利用字典来实现缓存
我们之前的`fibonacci`函数 会重复计算一些已经计算过的值,那么我们建一个 字典 缓存起来,如果计算过 就返回这个值。
known = {0:0,1:1}
def fibonacci(n):
if n in known:
return known[n]
res = fibonacci(n-1)+fibonacci(n-2)
known[n]=res
return res
ackermann 也可以简历一个缓存
cache = {}
def ackermann(m, n):
if m == 0:
return n+1
if n == 0:
return ackermann(m-1, 1)
try:
return cache[m, n]
except KeyError:
cache[m, n] = ackermann(m-1, ackermann(m, n-1))
return cache[m, n]
练习
1. 读入'words.txt'并将单词以字典的形式存储
def get_words():
r = []
lin = open('words.txt')
for line in lin:
word = line.strip()
r.append(word)
return r
words = get_words()
def word2dict(w):
word = dict()
for i in range(len(w)-1):
word[w[i]]=True
return word
dict_word=word2dict(words)
2. 利用字典`get`方法,将`histogram`写得更紧凑
def histogram_get(s):
d = dict()
for i in s:
t = d.get(i,0)
d[i] = t+1
return d
w2 = histogram_get("brontosaurus")
3. 字典方法有一个keys,以列表的方式返回字典所有的键,修改`print_hist`按照字典顺序打印字典的键和他们的值
def print_keys(h):
r = h.keys()
for i in r:
print i,h[i]
print_keys(w2)
4. 修改`reverse_lookup`使它建立一个包含所有映射到v键的列表
def reverse_lookup2(d,v):
r = []
for k in d:
if d[k]==v:
r.append(k)
return r
5. 利用`setdefault`来写个更简洁的`invert_dict`
def invert_dict2(d):
inverse = dict()
for key in d:
inverse.setdefault(d[key],[]).append(key)
return inverse
术语表
- 字典(dictionary):从键的集合到对应的值的集合的映射
- 键值对(key-value pair):键到值得映射的战士
- 项(item):键值对的另一个名称
- 键(key):字典中出现在键值对的前一部分的对象
- 值(value):字典中出现在键值对后一部分的对象
- 实现(implementation):进行计算的一个具体方式
- 散列表(hashtable):python字典的是先用的算法
- 散列函数(hash function):散列表中用来计算一个键的位置的函数
- 可散列(hashable):拥有散列函数的类型
- 查找(lookup):字典的一个操作,接受一个键,并找到它对应的值。
- 反向查找(reverse lookup):字典的一个操作,通过一个值来找到它对应的一个或多个键
- 单件(singleton):只包含一个元素的列表
- 直方图(histogram):一个计数器的集合
- 备忘(memo):将计算结果存储起来,以避免将来进行不必要的计算
- 标志(flag):用于标记一个条件是否为真的布尔变量
think in python 11 字典的更多相关文章
- Python的字典
1. Python的字典 1.1. 字典的定义 在Python中,字典是一种key-value的数据类型,也是唯一的映射类型:字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器 ...
- python基础--字典
Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...
- python入门-字典
1 python是使用{}来表示字典 字典是一系列的键值对 alien_0={} 2 访问字典中的值 new_point = alien_0['point'] print("you just ...
- 深入Python(1): 字典排序 关于sort()、reversed()、sorted()
http://www.cnblogs.com/BeginMan/p/3193081.html 一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠 ...
- python中字典排序
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- Python中字典和集合
Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...
- Python的字典和JSON
Python的字典和JSON在表现形式上非常相似 #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'] ...
- Python dictionary 字典 常用法
Python dictionary 字典 常用法 d = {} d.has_key(key_in) # if has the key of key_in d.keys() ...
- python有序字典OrderedDict()
转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...
随机推荐
- LR性能测试应用
上半个月,由于工作和上课两边跑,几乎没有属于自己的时间去做自己想做的事,在没有加班的一天晚上,我突然冲动地跑到图书馆借了一本书<LR性能测试应用>——姜艳. 我总喜欢看那些陈旧的书,因为在 ...
- 【降维解法:最大字段和->最大子矩阵和->最终版最大子长方体和】【UVA10755】Garbage Heap
突然感觉刷完这一套专题后 码力有了质的飞跃,fighting 努力会有结果! 最大字段和是一个很经典的问题 O(n)算法 而对于最大子矩阵和 可以思考一个这样的想法 枚举上下边界i,j把i到j这一段的 ...
- HDU 2030 统计汉字
BestCoder官方群:385386683 欢迎加入~ 寻人启事:2014级新生看过来! 汉字统计 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 安装Php时候报错信息:virtual memory exhausted: Cannot allocate memory (不能分配内存)
原因是fileinfo这个函数在编译时非常消耗内存,而系统内存又不够了,所以才会出现此问题. 网上找了方法: 1,关闭其他占用大内存的进程. 2,在编译是添加参数 --disable-fileinfo
- Js触发ASP.NET Validation控件的验证, 同时获取前台验证结果(不包括CustomValidator)
function CallValidate(group) { if (typeof (Page_ClientValidate) == "function") { Page_Bloc ...
- SonarQube 项目配置文件
费话不说,直接上代码: 需要注意的地方: 1. 每个项目的key不能重复. 2. 注意编码方式. 3. 注意分模块的写法. 4. 忽略源码文件的写法. # Required metadatasonar ...
- 利用JPEGImageEncoder进行简单的图片压缩
import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.i ...
- tablbView中section的间距
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { if (sect ...
- Android 底部Dialog显示
public void showComplainDialog() { ComplainDialog complain_dialog = new ComplainDialog(OrderDetialAc ...
- select语句返回结果的顺序问题 .
今天看到论坛上一个朋友的回帖内容,突然意识到自己好像从来没对SELECT语句做过任何思考,即便SELECT是平时使用最多的语句.自己建了两个测试表,内容如下: SQL> conn scott/t ...