ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 字典 Dict `Dict`用`{ }`表示,是可变的,且可存储任意类型对象,其概念基于生活中的字典原型,使用『名称-内容』对数据进行构建。 ## 特点 * 字典中的数据必须以键值对(key-value)形式出现 * 键不可重复(键重复时,只会记住该键对应的最后一个值);值可重复 * 键(key)是不可变对象,不能进行修改;值(value)是可以修改的,可以是任意对象 ## 基础操作 `Dict`根据`key`来计算`value`的存储位置。如果`key`可变,每次计算相同`key`得出的结果不同,那`Dict`内部就乱套了。 ```python # 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行 dict1 = {'name':'Tommy', 'age':25, 'sex':'male', 'extra':'unmarried'} dict2 = {38.5:'Today is hot', ('x','y'):(1,2)} print('dict1:', dict1) print('dict2:', dict2) # 访问某个元素 print("dict1里的name dict1['name']:", dict1['name']) print("dict2里的('x','y') dict2[('x','y')]:", dict2[('x','y')]) # 修改某个元素 dict1['age'] = 26 print("修改dict1里的age为26 dict1['age'] = 26:", dict1) # 删除某个元素 del(dict1['extra']) print("删除dict1里的extra del(dict1['extra']):", dict1) # 同一个键出现多次,只会记住最后一次 dict3 = {'name':'Tommy', 'age':25, 'name':'liuzhen153', 'name':'Liuzhen'} print('dict3:', dict3) # 键是否在dict中存在 print("键name是否在dict1中存在'name' in dict1 :" , 'name' in dict1) # 迭代 print('迭代输出dict1每一项:') for key in dict1: print(key, dict1[key]) ``` **输出结果** ``` dict1: {'name': 'Tommy', 'age': 25, 'sex': 'male', 'extra': 'unmarried'} dict2: {38.5: 'Today is hot', ('x', 'y'): (1, 2)} dict1里的name dict1['name']: Tommy dict2里的('x','y') dict2[('x','y')]: (1, 2) 修改dict1里的age为26 dict1['age'] = 26: {'name': 'Tommy', 'age': 26, 'sex': 'male', 'extra': 'unmarried'} 删除dict1里的extra del(dict1['extra']): {'name': 'Tommy', 'age': 26, 'sex': 'male'} dict3: {'name': 'Liuzhen', 'age': 25} 键name是否在dict1中存在'name' in dict1 : True 迭代输出dict1每一项: name Tommy age 26 sex male ``` ## 基础函数 ```Python dict = {'name':'Tommy', 'age':25, 'sex':'male', 'extra':'unmarried'} print("计算dict长度,即键的总数 len(dict):", len(dict)) ``` **输出结果** ``` 计算dict长度,即键的总数 len(dict): 4 ``` ## 基础方法 ```Python dict = {'name':'Tommy', 'age':25, 'sex':'male', 'extra':'unmarried'} dict1 = {'age':27, 'company':'Baidu'} print("返回所有键 dict.keys():", dict.keys()) print("判断dict中是否存在某个键 dict.__contains__('tall'):", dict.__contains__('tall')) print("返回指定键的值,如果值不在字典中返回default值 dict.get(key, default=None):", dict.get('lover','Chaochao')) print("dict.get()不会修改dict:", dict) print("返回指定键的值,如果值不在字典中返回default值并新增该键值对 dict.setdefault(key, default=None):", dict.setdefault('lover','Chaochao')) print("dict.setdefault()会修改dict:", dict) print('dict.items()返回可供遍历的键值对:') for k,v in dict.items(): print(k, v) dict.update(dict1) print('dict.update(dict1)会将dict1中的键/值更新到dict里,相同键会更新值,不存在的会新增:', dict) print('返回字典中所有的值 dcit.values():', dict.values()) p = dict.pop('tall', 'not exits this key') print("dict.pop(key[,default]) 删除key 所对应的值,返回值为被删除的值。key值不给出时返回default值 dict.pop('tall', 'not exits this key'):", p) print('现在的dict:', dict) p = dict.popitem() print("随机删除并返回被删除的一组键值对,如果字典已为空,会出现异常dict.popitem():", p) print('随机删除键值对后的dict:', dict) dict_copy = dict.copy() print('我是dict复制来的dict_copy:', dict_copy) dict_copy.clear() print('dict_copy清空后 dict_copy.clear():', dict_copy) # 复制和使用 = 赋值不同,复制产生了新的字典,对dict_copy的任何操作不影响dict print('dict_copy清空后的dict:', dict) # 使用 = 赋值时,所有的操作都会影响到dict本身 dict3 = dict print('我是赋值来的dict3:', dict3) dict3.clear() print('dict3清空后 dict3.clear():', dict3) print('dict3清空后的dict:', dict) ``` **输出结果** ``` 返回所有键 dict.keys(): dict_keys(['name', 'age', 'sex', 'extra']) 判断dict中是否存在某个键 dict.__contains__('tall'): False 返回指定键的值,如果值不在字典中返回default值 dict.get(key, default=None): Chaochao dict.get()不会修改dict: {'name': 'Tommy', 'age': 25, 'sex': 'male', 'extra': 'unmarried'} 返回指定键的值,如果值不在字典中返回default值并新增该键值对 dict.setdefault(key, default=None): Chaochao dict.setdefault()会修改dict: {'name': 'Tommy', 'age': 25, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao'} dict.items()返回可供遍历的键值对: name Tommy age 25 sex male extra unmarried lover Chaochao dict.update(dict1)会将dict1中的键/值更新到dict里,相同键会更新值,不存在的会新增: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao', 'company': 'Baidu'} 返回字典中所有的值 dcit.values(): dict_values(['Tommy', 27, 'male', 'unmarried', 'Chaochao', 'Baidu']) dict.pop(key[,default]) 删除key 所对应的值,返回值为被删除的值。key值不给出时返回default值 dict.pop('tall', 'not exits this key'): not exits this key 现在的dict: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao', 'company': 'Baidu'} 随机删除并返回被删除的一组键值对,如果字典已为空,会出现异常dict.popitem(): ('company', 'Baidu') 随机删除键值对后的dict: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao'} 我是dict复制来的dict_copy: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao'} dict_copy清空后 dict_copy.clear(): {} dict_copy清空后的dict: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao'} 我是赋值来的dict3: {'name': 'Tommy', 'age': 27, 'sex': 'male', 'extra': 'unmarried', 'lover': 'Chaochao'} dict3清空后 dict3.clear(): {} dict3清空后的dict: {} ``` # 代码库地址 [https://github.com/liuzhen153/play-algorithm-python](https://github.com/liuzhen153/play-algorithm-python)