Python數據結構(一) 字典
阿新 • • 發佈:2017-10-10
字典
0x 01 字典簡介
子典和列表是python中最常用的兩種數據類型,字典是鍵值對(key-value)格式的數據類型,它和列表一樣也有索引,但不是列表中的下標,而是使用key來作為索引,key所對應的值就是value,所以字典是無序的,因此任何時候只要訪問字典的key,便可以得到對應的value,。key必須是不可變類型且唯一(和set一樣天生去重),比如字符串、數字、元祖等。
0x 02 字典和其它常見數據類型的區別
數據類型 符號表示 是否可變類型(一旦賦值是否可修改)
列表 [] 可變類型
元祖 () 不可變類型
集合 {} 可變類型
字典 {} 可變類型
下面介紹一些字典常見的操作:
0x 03 字典的創建、添加
最簡單創建字典並添加元素的方式:
dic = {} dic[‘key1‘] = 1 dic[‘key2‘] = 2 dic[‘key3‘] = 3
直接打印字典名看下最終dic字典的數據有哪些:
print(dic) {‘key2‘: 2, ‘key1‘: 1, ‘key3‘: 3}
上面我們創建了一個名為dic的空字典,並分別為字典添加了三個key:key1,key2,key3,每個key都有對應的value,最終查看的結果中再次證明字典存儲是無序的(沒有先後順序的)。
0x 04 字典的刪除
dic.popitem() #調用字典的popitem()方法,隨機刪除一個元素 {‘key2‘: 2, ‘key3‘: 3} dic.pop(‘key2‘) #調用pop()方法,刪除指定的key {‘key1‘: 1, ‘key3‘: 3} del dic[‘key3‘] #指定刪除字典中的索引(即key)及其值(value) {‘key1‘: 1, ‘key2‘: 2}
0x 05 字典的修改
dic[‘key2‘] = 4 #重新賦值即定義 {‘key1‘: 1, ‘key2‘: 4, ‘key3‘: 3}
0x 06 字典的查找
print(dic[‘key2‘]) #直接使用key來尋找對應的值 2 print(dic[‘key4‘]) #key方式直接讀取,如果沒有找到key對應的值,就會拋出KeyError異常 KeyError: ‘key4‘ print(dic.get(‘key3‘)) #使用get()方法,如果值存在就返回 3 print(dic.get(‘key4‘)) #get()方法如果發現值不存在,則會返回一個None對象,更加友好的輸出 None print(dic.setdefault(‘key3‘,‘33‘)) #setdefault()方法,如果指定的key已存在,則返回當前的值 3 print(dic.setdefault(‘key4‘,‘44‘)) #如當前key不存在,則設置一個默認值添加到字典並返回value的值 44 print(dic) #最終的字典 {‘key3‘: 3, ‘key2‘: 2, ‘key1‘: 1, ‘key4‘: ‘44‘}
再看一下字典的keys()、values()、items()方法的區別:
[print(i) for i in dic.keys()] #可以看到keys()存儲的是字典的key(鍵的名字) key1 key3 key2 [print(i) for i in dic.values()] #values()存儲的是所有的values(值) 1 3 2 [print(k,v) for k,v in dic.items()] #而items()則是存儲了key及key對應的values() key1 1 key3 3 key2 2
0x 07 字典的使用(一)
""" 使用字典來實現:用戶輸入一個數字,打印每一位數字及其重復的次數 """ # 判斷用戶輸入是否是數字 print(‘[note] please input a integer.‘) while True: num = input(‘>>> ‘).strip().lstrip(‘0‘) if num.isdigit(): break else: print(‘[Error] You input is not a number, please re-input.‘) #空字典 nums = {} #value值遞增 for i in num: if not nums.get(i): #返回key對應的值value nums.setdefault(i, 1) else: print(nums.get(i)) nums[i] += 1 #叠代輸出 for k, v in nums.items(): #keys() values() items() print(k, v)
0x 08 字典的使用(二)
""" 數字重復統計 隨機產生100個整數 數字的範圍[-1000,1000] 升序輸出所有不同的數字及其重復的次數 """ import random nums = {} for _ in range(100): randnums = random.randrange(-1000, 1000) if nums.get(randnums): nums[randnums] += 1 continue else: nums.setdefault(randnums, 1) keys = sorted(nums.keys()) for i in keys: print(‘{:<4} {:<4}‘.format(i, nums[i]))
0x 09 字典的使用(三)
""" 字符串重復統計 字符表‘abcdefghijklmnopqrstuvwxyz‘ 隨機挑選2個字母組成字符串,共挑選100個 降序輸出這100個字符串及重復的次數 """ import random import string strs = ‘abcdefghijklmnopqrstuvwxyz‘ dic = {} for _ in range(100): # randstr = ‘‘.join(random.sample(strs, 2)) randstr = "".join(random.choice(strs) for _ in range(0, 2)) #三種輸出2個隨機字符的方式 # randstr = ‘‘.join(random.sample(string.ascii_lowercase, 2)) if randstr not in dic: dic.setdefault(randstr, 1) else: dic[randstr] += 1 sortstr = sorted(dic.keys()) #升序 #sortstr = sorted(dic.keys(),reverse=True) #降序 for i in sortstr: print(‘{:<4} {:<4}‘.format(i, dic[i])) """ Data #string模塊的一些常用字符串對象 __all__ = [‘ascii_letters‘, ‘ascii_lowercase‘, ‘ascii_uppercase‘, ‘capwords‘, ‘digits‘, ‘hexdigits‘, ‘octdigits‘, ‘printable‘, ‘punctuation‘, ‘whitespace‘, ‘Formatter‘, ‘Template‘] ascii_letters = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘ ascii_lowercase = ‘abcdefghijklmnopqrstuvwxyz‘ ascii_uppercase = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘ digits = ‘0123456789‘ hexdigits = ‘0123456789abcdefABCDEF‘ octdigits = ‘01234567‘ printable = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\‘()*+,-./:;<=>[email protected][\\]^_`{|}~ \t\n\r\x0b\x0c‘ punctuation = ‘!"#$%&\‘()*+,-./:;<=>[email protected][\\]^_`{|}~‘ whitespace = ‘ \t\n\r\x0b\x0c‘ """
Python數據結構(一) 字典