Python-字典
字典是无序的,字典是key-value结构,一个键对应一个值,key必须可hash,必须是唯一的,并且不可以变,value可以取任何数据类型,如字符串,数字或元组,可以是不唯一的
定义一个字典
>>> info = {'name':'John','age':22,'sex':'male'} >>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info_1 = dict({'name':'Jane','age':25,'sex':'female'}) >>> info_1 {'name': 'Jane', 'sex': 'female', 'age': 25} >>> info_2 = dict(name='Jack',age=23,sex='male') >>> info_2 {'name': 'Jack', 'sex': 'male', 'age': 23} >>> info_3 = dict((['name','Andy'],['age',18],['sex','male'])) >>> info_3 {'name': 'Andy', 'sex': 'male', 'age': 18} >>> info_4 = {}.fromkeys(['name','age','sex'],'test') # 三个key都被赋值了同一个value >>> info_4 {'name': 'test', 'sex': 'test', 'age': 'test'}
获取字典中键值的情况
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info.keys() # 获取字典中的所有key dict_keys(['name', 'sex', 'age']) >>> info.values() # 获取字典中所有的value dict_values(['John', 'male', 22]) >>> info.items() # 获取字典中所有的键值对 dict_items([('name', 'John'), ('sex', 'male'), ('age', 22)])
获取字典的长度,即键值对的个数
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> len(info) 3
添加字典的键值对
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info['Nationality'] = 'China' # 直接通过新的键值对来添加 >>> info {'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22} >>> info.setdefault('age', 12) # 如果key存在的话就不会添加 22 >>> info {'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22} >>> info.setdefault('Language', 'Chinese') # 如果key不存在的话,会添加一个新的键值对 'Chinese' >>> info {'Language': 'Chinese', 'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22}
获取字典中的value
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info['name'] # 直接通过key查看对应的value 'John' >>> info.get('age') # 通过get方法来获取对应的value值 22 >>> info.get('age1',"Can't find age1") # 如果get方法中的key不存在,就会返回设定的默认值 "Can't find age1"
修改字典中key的value值
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info['sex'] = 'female' >>> info {'name': 'John', 'sex': 'female', 'age': 22}
把一个字典的内容添加到另一个字典里
>>> info {'name': 'John', 'sex': 'female', 'age': 22} >>> info1 {'Nationality': 'China', 'Language': 'Chinese'} >>> info.update(info1) # 把info1字典里的内容添加到info里 >>> info {'name': 'John', 'sex': 'female', 'Nationality': 'China', 'Language': 'Chinese', 'age': 22}
字典的删除操作
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info.pop('sex') # 使用pop方法通过key删除 'male' >>> info.pop('age1',"Can't find age1") # 如果没有key的话,就返回设定的默认值 "Can't find age1" >>> del info['age'] # 直接用del删除 >>> info {'name': 'John'} >>> info = {'name':'John','age':22,'sex':'male'} >>> info.popitem() # 随机删除字典中的一个键值对 ('name', 'John') >>> info.popitem() ('sex', 'male') >>> info.popitem() ('age', 22) >>> info.popitem() # 如果字典为空,使用popitem方法就会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'popitem(): dictionary is empty' >>> info = {'name':'John','age':22,'sex':'male'} >>> info.clear() # 清空字典中所有的键值对 >>> info {}
字典的复制
>>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info_1 = info # 通过赋值来复制,如果原字典发生改变,复制的字典也会发生改变 >>> info_1 {'name': 'John', 'sex': 'male', 'age': 22} >>> info['Nationality'] = 'China' >>> info {'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22} >>> info_1 {'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22} >>> info {'name': 'John', 'sex': 'male', 'age': 22} >>> info_1 = info.copy() # 深度copy,原字典发生改变,复制的字典不会发生改变,两个字典变得没有关系了 >>> info_1 {'name': 'John', 'sex': 'male', 'age': 22} >>> info['Nationality'] = 'China' >>> info {'name': 'John', 'sex': 'male', 'Nationality': 'China', 'age': 22} >>> info_1 {'name': 'John', 'sex': 'male', 'age': 22}