Python字典

字典(dict):

Python内置了字典,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,查找速度是极快的。

举栗子:

假设要根据同学的名字查找对应的成绩,使用列表实现,则需要两个列表:

names = ['zhangsan','lisi','wanger']

scores = [85,56,84]

当给出一个名字,要查找对应的成绩时,需现在names中找到对应的位置,再从scores取出相应的成绩,列表越长耗时越长。

用字典方式实现名字和成绩的查询:

>>>c = {'zhangsan':77,'lisi':64,'wanger':34}

>>>c = ['zhangsan']

77

>>>

dict的查询方式类似新华字典,现在字典的(例如部首表里)查找该字的对应页码,直接找到该页即可。它通过key直接找到value所在的内存地址,因此速度很快,而在list中。查找的方式类似一页一页的翻字典,  list越长,耗时越长。

一个key只能对应一个value,多次对一个key存入value,会替换掉原来的value

如果key不存在,dict会提示KeyError。

要避免key不存在的错误,有两种办法,其一,通过in判断key是否存在:

>>>'wanger' in d

False

>>>

其二:通过dict提供的get()方法,如果key不存在,可以返回None,或者自行指定的value

>>>d.get('mazi') #返回None的时候python的交互环境不显示结果

>>>d.get('mazi',无该值)#显示指定的value

无该值

>>>d.get('lisi')#如果key存在,显示该key对应的value

88

要删除一个key,用pop(key)方法,对应的value也会从字典删除

>>>d.pop('lisi')

88

>>>d

{'zhangsan':55}#李四和对应的值被删除

注意:dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

1,查找和插入速度极快,不会随key的增加而变慢。

2,需要占用大量内存,内存消耗大。

以上两点正好和list相反,

1,查找和插入的时间随着元素的增加而增加。

2,占用空间小,内存浪费也少。

因此,dict是用空间来换取时间的一种方法。

dict用在高速查找的很多地方,在python代码中无处不在。正确使用dict非常重要需要牢记的第一条是dict的key必须是不可变对象。

dict根据key来计算value的存储位置,所以每次计算相同的key得出的结果必须一样,通过key计算位置的算法为哈希算法(hash)。

为保证哈hash的正确性,作为key的对象不可变,在python中,字符串,整数等都为不可变对象,因此可以作为key,而list是可变的,就不能作为key。


练习:
1. 现有一个字典dict1 保存的是小写字母a-z对应的ASCII码
dict1 = {'a': 97, 'c': 99, 'b': 98, 'e': 101, 'd': 100, 'g': 103, 'f': 102, 'i': 105, 'h': 104, 'k': 107, 'j': 106, 'm': 109, 'l': 108, 'o': 96, 'n': 110, 'q': 113, 'p': 112, 's': 115, 'r': 114, 'u': 117, 't': 116, 'w': 119, 'v': 118, 'y': 121, 'x': 120, 'z': 122}


1) 将该字典按照ASCII码的值排序
答:sorted(dict1.items(),key=lambda item:item[1])
2) 有一个字母的ASCII错了,修改为正确的值,并重新排序
答:dict1['o']=111→sorted(dict1.items(),key=lambda item:item[1])

2. 用最简洁的代码,自己生成一个大写字母 A-Z 及其对应的ASCII码值的字典dict2(使用dict,zip,range方法)
答:>>>import string

>>>dict(zip(string.uppercase,range(065,92)))
{'A': 65, 'C': 67, 'B': 66, 'E': 69, 'D': 68, 'G': 71, 'F': 70, 'I': 73, 'H': 72, 'K': 75, 'J': 74, 'M': 77, 'L': 76, 'O': 79, 'N': 78, 'Q': 81, 'P': 80, 'S': 83, 'R': 82, 'U': 85, 'T': 84, 'W': 87, 'V': 86, 'Y': 89, 'X': 88, 'Z': 90}
>>>dict2=dict(zip(string.uppercase,range(65,92)))

3. 将dict2与第一题排序后的dict1合并成一个dict3

>>>dict3=dict1.copy()

>>>dict3.update(dict2)



##############################



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值