python字典类型
字典类型
一、字典(dict)
如果现在需要存储我的信息,通过我们之前学习的数据类型,只有列表能够存储我们的信息。使用列表虽然达到了我们的目的,但是我们能通过列表取值的时候,是基于我们已经知道了列表内部所有的元素。因此我们是不是可以给列表内的每一个元素都添加一个描述信息呢?否则如果不是存我的信息,而是用列表存取了成千上万个值,那么我们怎么通过索引精准取值呢?这样看起来好像是不可能的,因此可以使用新的数据类型——字典。
1.1作用
用来存取多个值,按照key:value的方式存储,取的时候可以通过key而非索引取值,key对value具有描述性的作用。存放数据的种类各种各样并且数据较多的时候可以使用字典。
1.2定义
在{}内用逗号分隔开多个元素,每一个元素都是key:value的格式,在其中value是任意格式的数据类型,key由于具有描述性的作用,所以key通常是字符串的类型。
user_info = {'name': 'python', 'gender': 'male', 'age': 19,
'company_info': ['oldboy', 'shanghai', 50]}
print(id(user_info))
print(type(user_info))
print(user_info)
输出:
2084781392344
<class 'dict'>
{'name': 'python', 'gender': 'male', 'age': 19, 'company_info': ['oldboy', 'shanghai', 50]}
1.3作用
字典取值不再依赖索引,而是依赖于key,通过[key]即可获取对应的value值。
#字典中套列表
user_info = {'name': 'python', 'gender': 'male', 'age': 19,
'company_info': ['oldboy', 'shanghai', 50]}
print(user_info['name'])
print(user_info['company_info'][1])
输出:
python
shanghai
#字典中套字典
user_info = {'name': 'python', 'gender': 'male', 'age': 19,
'company_info': {'c_name':'oldboy','adder': 'shanghai', 'age':50}}
print(user_info['name'])
print(user_info['company_info']['c_name'])
输出:
python
oldboy
二、字典类型的内置方法(dict)
2.1常用操作+内置方法(优先掌握)
-
按key值存取值:可存可取也可以改变
dic = {'a':1,'b':2} print(f"first dic['a']:{dic['a']}") 输出: first dic['a']:1 dic['a'] = 3 print(f"first dic['a']:{dic['a']}") 输出: first dic['a']:3 dic['a'] = 2 print(dic) #输出: {'a':2,'b':2}
-
长度len
dic = {'a':1,'b':2} print(f"len(dic):{len(dic)}") 输出: len(dic):2
-
成员运算in和not in
dic = {'a':1,'b':2} print(f"'a' in dic :{'a' in dic}") print(f"1 in dic : {1 in dic}") 输出: 'a' in dic :True 1 in dic : False
-
删除del、pop()、popitem()删除键值对,默认删除最后一个。
dic = {'a':1,'b':2} print(dic['a']) print(f"dic.get('a'):{dic.get('a')}") del dic['a'] print(f"dic.get('a'):{dic.get('a')}") 输出: 1 dic.get('a'):1 dic.get('a'):None
#dict 删除之pop() dic = {'a':1,'b':2} dic.pop('a') print(dic['b']) print(f"dic.pop('b'):{dic.pop('b')}") print(f"dic.get('a'):{dic.get('a')}") 输出: 2 dic.pop('b'):2 dic.get('a'):None
#dict 删除之popitem() dic = {'a':1,'b':2} ## 随机删除一个元素,无法指定 print(f"dic.popitem():{dic.popitem()}") print(f"dic.popitem():{dic.popitem()}") 输出: dic.popitem():('b', 2) dic.popitem():('a', 1)
-
键key(),值value(),键值对items() item用的最多,与解压缩联合使用。
# dic键keys(),值values(),键值对items() dic = {'a':1,'b':2} print(f"dic.keys():{dic.keys()}") print(f"dic.values():{dic.values()}") print(f"dic.items():{dic.items()}") 输出: dic.keys():dict_keys(['a', 'b'])#套列表 dic.values():dict_values([1, 2])# dic.items():dict_items([('a', 1), ('b', 2)])#套元组
info_dict = {'name': 'wangdapao', 'age': 18, 'height': 120, 'gender': 'female', 'hobby_list': ['dapao', '666', '233']} print(info_dict.items()) for i in info_dict.items(): print(i) for k, v in info_dict.items(): print(k, v) lt = [[1, 2, 3], [2, 3, 4], [5, 6, 7]] for a, b, c in lt: print(a, b, c) #输出: dict_items([('name', 'wangdapao'), ('age', 18), ('height', 120), ('gender', 'female'), ('hobby_list', ['dapao', '666', '233'])]) ('name', 'wangdapao') ('age', 18) ('height', 120) ('gender', 'female') ('hobby_list', ['dapao', '666', '233']) name wangdapao age 18 height 120 gender female hobby_list ['dapao', '666', '233'] 1 2 3 2 3 4 5 6 7
-
循环
##dic之循环 # dic是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序 dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4} for k, v in dic.items(): # items可以换成keys()、values() print(k, v) 输出: a 1 b 2 c 3 d 4
2.2掌握下面内置方法
-
get(获取),如果没有,返回None,也可以指定返回值1
dic = {'a':1,'b':2} print(f"dic.get('a'):{dic.get('a')}") print(f"dic.get('c'):{dic.get('c')}") print(dic.get('c',3)) 输出: dic.get('a'):1 dic.get('c'):None 3
-
update(添加)更新
dic = {'a':1,'b':2} dic1 = {'c':3} dic.update(dic1) print(f"dic:{dic}") 输出: dic:{'a': 1, 'b': 2, 'c': 3}
-
fromkeys(集体添加并赋值)
dic = dict.fromkeys(['name','age','sex'],None) print(dic) 输出: dic:{'name': None, 'age': None, 'sex': None} dic = dict.fromkeys(['name','age','sex'],2) print(f"dic:{dic}") 输出: dic:{'name': 2, 'age': 2, 'sex': 2}
-
setdefault(添加字典),有则不变,无则往里面添加值。
# dic之setdefault(),有指定key不会改变值;无指定key则改变值 dic = {'a':1,'b':2,} print(f"dic.setdefailt('a'):{dic.setdefault('a',3)}") print(f"dic:{dic}") print(f"dic.setfailt('c'):{dic.setdefault('c',3)}") print(f"dic:{dic}") 输出: dic.setdefailt('a'):1 dic:{'a': 1, 'b': 2} dic.setfailt('c'):3 dic:{'a': 1, 'b': 2, 'c': 3}
-
clear()清空
dic={1:1,2:2,3:3} print(dic) dic.clear() print(dic) #输出: {1: 1, 2: 2, 3: 3} {}
-
copy()复制
dic={1:1,2:2,3:3} print(dic) dic1 = dic.copy() print(dic1) #输出: {1: 1, 2: 2, 3: 3} {1: 1, 2: 2, 3: 3}
练习
s = 'hello tank tank say hello sb sb'
l = s.split(' ')#对字符串分割以空格为分界线
print(l)
print(type(l))## 分割之后为列表
dic = {}
for item in l :
if item in dic :
dic[item] += 1
else:
dic[item] = 1
print(dic)
输出:
['hello', 'tank', 'tank', 'say', 'hello', 'sb', 'sb']
<class 'list'>
{'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}