摘要
字典及其常见方法
目的
-
理解字典数据类型含义及其特点
-
掌握字典的常见操作方法
内容
字典基本介绍和定义方法
- 字典--数据结构
- 使用键-值(key-value)存储,具有极快的查找速度。
- 字典key为不可变对象
- 定义方法
list1 = ['name','tom']
list2 = ['age',20]
#合并两个列表
print(zip(list1,list2))
结果:[('name', 'age'), ('tom', 20)]
#字典创建方法
#方法1 dict为字典函数
dict(zip(list1,list2))
#方法2 直接创建
{'a':1,1:123}
#方法2
dict(a=1,b=2)
操作方法
#key() keys值,返回的是keys的一个列表
dic = {'a':1,1:123}
print(dic.keys())
结果:['a', 1]
print(len(dic))
结果:2
#values() 返回values值的一个列表
print(dic.values())
结果:[1, 123]
#get() 返回key的值,key是唯一的,key不存在返回None
print(dic.get('a'))
结果:1
#判断key值是不是在字典中
print(2 in dic)
结果:False
#items 字典变列表
print(dic.items())
结果:[('a', 1), (1, 123)]
#copy() 产生新字典和老字典一样
dic1 = dic.copy()
print(dic1)
结果:{'a': 1, 1: 123}
#pop() 删除key值,并返回values,若不存在,报KeyError错误
print(dic1.pop(1))
结果:123
#update() 更新,或两个字典更新到一个字典
dic.update(dic1)
print(dic)
结果:{'a': 1, 1: 123}
#formkeys,创建新字典、字典添加元素,字符为key,默认值为None
print(dic.fromkeys('abc'))
结果:{'a': None, 'c': None, 'b': None}
print(dic.fromkeys(range(3),100))
结果:{0: 100, 1: 100, 2: 100}
#iteritems():变成列表可迭代对象
字典常见打印
#访问字典的key
for i in dic:
print(i)
#访问字典的values
for i in dic.iteritems():
print(i)
#打印字典
for k in dic:
print(k,dic[k])
print('{0},{1}'.format(k,dic[k]))
for k,v in dic.iteritems():
print(k,v)
字典和列表比较
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
练习
#键盘输入数据,存到字典当中,最后格式化打印
info = {}
name = raw_input('Please input name:')
age = raw_input('Please input age:')
gender = raw_input('Please input (M/F):')
info['name'] = name
info['age'] = age
info['gender'] = gender
print(info.items())
#格式化输出
for k,v in info.items():
print('%s : %s' %(k, v))
print('{0} : {1}'.format(k,v))
总结
- 字典的定义方法
- 字典的常见操作方法和打印方式
- 格式化输出
- 字典和列表的特点比较
习题完成情况
# 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方法排序,取值时使用匿名函数lambda取出values
sorted(dict1.iteritems(), key=lambda d:d[1], reverse=False)
# 2) 有一个字母的ASCII错了,修改为正确的值,并重新排序
#思路,o的ascii码错误 进行修改
dict1['o'] = 111
# 2. 用最简洁的代码,自己生成一个大写字母 A-Z 及其对应的ASCII码值的字典dict2(使用dict,zip,range方法)
#思路 string模块中uppercase方法生成A到Z的字符串,A-Z ASCII码65-92
#zip并两个字符串成一个列表,dict生成字典
import string
dict(zip(string.uppercase,range(65,92)))
dict2 = dict(zip(string.uppercase,range(65,92)))
# 3. 将dict2与第一题排序后的dict1合并成一个dict3
dict3 = dict1.copy()
dict3.update(dict2)