若是如今須要存儲個人信息,經過咱們以前學習的數據類型,只有列表可以存儲咱們的信息。使用列表雖然達到了咱們的目的,可是咱們能經過列表取值的時候,是基於咱們已經知道了列表內部全部的元素。所以咱們是否是能夠給列表內的每個元素都添加一個描述信息呢?不然若是不是存個人信息,而是用列表存取了成千上萬個值,那麼咱們怎麼經過索引精準取值呢?這樣看起來好像是不可能的,所以可使用新的數據類型——字典。算法
用來存取多個值,按照key:value的方式存儲,取的時候能夠經過key而非索引取值,key對value具備描述性的做用。存放數據的種類各類各樣而且數據較多的時候可使用字典。學習
在=={}==內用逗號分隔開多個元素,每個元素都是==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]}
字典取值再也不依賴索引,而是依賴於key,經過[key]便可獲取對應的value值。code
#字典中套列表 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
按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 inget
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()刪除鍵值對,默認刪除最後一個。it
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用的最多,與解壓縮聯合使用。class
# 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
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}