字典
字典也叫做哈希表或者关联数组,由键值对组成,键值对间由逗号分隔开,用 {} 创建。
1.字典的创建
可以直接通过 {} 创建,也可以将序列通过dict转化为字典类型。
a1={'a':1,'b':[1,2,3]}
#检查字典中是否含有某个键
'a' in a1
#结果:True
#直接访问键来访问其对应的值
a1['a']
#结果:1
#字典本身相当于由含有2个元素的元组组成的集合,如果不用到dict函数,可以通过以下的方法生成字典
mapping={} #先创建一个空的字典,再往里增加键值
for key, value in zip(range(5),reversed(range(5))):
mapping[key]=value
mapping
#结果为:{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}
#zip函数相当于创建了含有2个元素的元组的集合,再遍历整个迭代器,一一加入键值对。
#如果通过dict函数,可以将上述的代码简化,得到相同的结果
mapping=dict(zip(range(5),reversed(range(5))))
map1=dict(a=1,b=2,c=3)
2.字典元素的增加和删除,修改
字典和列表一样是可变对象,可以对其内容和长度进行更改。
#增加新的键值对 varibles[key]=value
a1['c']=('foo','dwarf')
a1
#结果: {'a': 1, 'b': [1, 2, 3], 'c': ('foo', 'dwarf')}
#删除键值对,由pop和del两种方法
a1.pop('a') #pop方法返回删除的键所对应的值,和列表中pop方法有所不同的是,只能通过指定键值的方法进行删除。列表中除了可以指定pop的索引,也可以不加任何参数,默认删除最右端的元素。
#结果: 1
a1
#结果:{'b': [1, 2, 3], 'c': ('foo', 'dwarf')}
del a1['c']
a1
#结果:{'b': [1, 2, 3]}
#可以通过update对两个字典进行合并
a1.update({'2':'summer','id':'foo'})
a1
#结果: {'b': [1, 2, 3], 'c': ('foo', 'dwarf'), '2': 'summer', 'id': 'foo'}
#update函数使用时,如果两个字典含有相同的键,那么原字典的对应的键的值会被覆盖。
3.默认值 get 函数和 setdefault 函数
在遍历字典的过程中,如果key不存在字典中,get函数能够返回一个默认值。
用法:
dict.get(key,defualt=None)
a1={'a': 1, 'b': [1, 2, 3], 'c': ('foo', 'dwarf')}
a1.get('a')
a1.get('d',default='18')
a1.get('e')
#结果:
'''
1
18
'''
#如果key存在于字典中,返回key对应的value值,如果不存在,如果不另外设定参数,则返回None,如果设置了default,那么返回default的值。
get 函数只能返回设定的 key 对应的value 值,但是不能在原来的字典中增加该键值对,setdefault 函数可以执行这一功能。
用法于get函数类型。
a1.setdefault('d','18')
a1
#结果:
'''
'18'
{'a': 1, 'b': [1, 2, 3], 'c': ('foo', 'dwarf'), 'd': '18'}
'''
#如果key不存在dict中,返回default值,并且将这对键值对添加到dict中,如果存在,返回key对应的value
举个例子,体会一下setdefault 函数的便利之处。
#要求:将自此组成的列表根据首字母分类为包含列表的字典
'''
比如:
words=['apple','bat','bar','atom','book']
输出:
{'a':['apple','atom'],'b':['bat','bar','book']}
'''
#不用 setdefault 函数
words= ['apple','bat','bar','atom','book']
by_letters={}
for word in words:
letter=word[0]
if letter not in by_letters:
by_letters[letter]= [word]
else:
by_letters[letter].append(word)
#使用 setdefault 函数
words= ['apple','bat','bar','atom','book']
by_letters={}
for word in words:
letter=word[0]
by_letters.setdefault(letter,[]).append(word)
#结果和上述相同
4.检查字典键类型是否有效
字典的键必须是不可变对象,值可以是任意的 Python 对象。不可变对象有标量类型(整数,浮点数,字符串)或者元组类型。
可以通过 hash 函数来检测一个对象是否可以哈希化,也就是是否可以作为一个字典的键。
hash('string')
hash([1,2])
网友评论