Python学习入门之字典
在python中字典是一系列的键值对,能将相关信息关联起来,跟C/C++中的结构体类似。每一个键都与一个值相关联,可以使用键来访问与之相关联的值,与键相关联的值可以是字符串,数字,列表乃至是字典,任何Python中的对象都可用作字典中的值,键与值之间用冒号分阁,而键与值之间用逗号分隔。
一个简单的字典示例
alien_0 = {
'color': "green",
'points': 5,
}
print(alien_0)
访问字典中的值
可依次指定字典名和放在方括号内的键
print(alien_0['color'])
print(alien_0['points'])
添加键-值对
可依次指定字典名、用方括号括起的键和相关的值
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
修改字典中的值
可依次指定字典名,用方括号括起的键以及与该键相关联的新值
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = "yellow"
print("The alien is " + alien_0['color'] + " now.")
删除键—值对
使用del语句将相应的键—值对彻底删除,必须指定字典名和要删除的键
del alien_0['points']
print(alien_0)
遍历字典
遍历所有键-值对,items函数返回一个键-值对列表
user_0 = {
'username': "efermi",
'first': "enrico",
'last': "fermi",
}
for key,value in user_0.items():
print("\nKey: " + key)
print("value: " + value)
遍历字典中的所有键,keys函数以列表返回一个字典所有的键
for key in user_0.keys():
print("dictionary key:" + key + "\n")
遍历字典中的所有值,values函数以列表返回一个字典所有的值
for value in user_0.values():
print("dictionary value:" + value + "\n")
嵌套
字典列表
alien_1 = {'color': "yellow",'points': 10}
alien_2 = {'color': "yellow",'points': 15}
alien = [alien_0,alien_1,alien_2]
print(alien)
批量生成字典列表
alien = []
for alien_num in range(10):
new_alien = {'color': "yellow",'points':alien_num*5}
alien.append(new_alien)
print(alien)
在字典中存储列表
pizza = {
'crust': "thick",
'toppings': ["mushrooms","extra cheese"]
}
print("you ordered a " + pizza['crust'] + "-crust pizza with the following toppings:")
for topping in pizza['toppings']:
print("\t" + topping)
在字典里存储字典
users = {
'fz': {
'first': "feng",
'last': "zhao",
'location':'chinese',
},
'zr':{
'first': "zeng",
'last': "rong",
'location': "chinese",
},
}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name=user_info['first'] + " " + user_info['last']
print("Full name : " + full_name)
print("Location : " + user_info['location'])
注意事项
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>> d ={'fz': 90}
>>> d['fz']
90
>>> d['fz'] = 88
>>> d['fz']
88
如果key不存在,dict就会报错:
>>> d['Mike']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Mike'
要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
>>> 'Mike' in d
False
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的时候Python的交互环境不显示结果。
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('fz')
75
>>> d
{'Michael': 95, 'Tracy': 85}
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'