Python中字典的应用及相关操作!
小白如何成為python數據分析師
第9天---->字典(dict)
小學我們就學會了翻閱查詢新華字典了,我們可以通過目錄索引查詢我們要找的字,便于理解學習這個字和字的含義。那么在編程語言中我們像字典的數據類型呢?還真有,也稱為字典。就像《新華字典》中,每個字都有與它對應的解釋一樣,每個字和它的解釋合在一起就是字典中的一個條目。在字典的字稱為鍵,字的解釋稱為值。 鍵(key)和值(value)組成的條目稱為鍵值對。字典={鍵:值, 鍵:值, 鍵:值, …}
當我們需要存儲多個信息時,比如一個人的個人信息(姓名,年齡、性別、愛好、聯系方法…),我們可以使用之前學過的列表、元組和集合,但是你會發現這些都不是最理想的選擇。會有各自的問題。我們將一堆數據放進去,讀取數據時,我們就會發現,這是個啥?因為沒有聲明,導致我們放進去的數據,讀出來時,我們就不認識了。集合是最不合適的,因為集合有去重特性,如果一個人的年齡和體重相同,那么集合中就會少一項信息。查詢時,我們得知道下標才好查找。不然就得一個一個的遍歷查找,效率低下。這時就是字典拯救我們了。
我們可以通過鍵很好的理解(值)數據含義,可以通過鍵快速查詢到值。
字典(dictionary)類型,這種數據類型最適合把相關聯的信息組裝到一起,并且可以幫助我們解決程序中為真實事物建模的問題。
相信你已經對字典有了一定了解,下面我們就來更深入的學習字典吧!
創建和使用字典
1.字面量語法
在Python中創建字典可以使用{}字面量語法,跟列表、集合差不多。值得注意的是字典的{}中的元素是以鍵值對的形式存在的,每個元素由:分隔的兩個值構成,:前面是鍵,:后面是值。
kuanglu = {'李淳罡': '天不生我李淳罡,劍道萬古如長夜。','蕭炎': '三十年河東,三十年河西,莫欺少年窮!','安瀾': '仙之巔,傲世間,有我安瀾便有天!','王騰': '我兒王騰有大帝之姿!'} print(kuanglu['王騰'])person = {'name': '王大錘','age': 20,'weight': 60,'office': '科華北路62號','home': '中同仁路8號','tel': '13122334455','contacts': {'qq': 123456,'tel': 12345678910,'a': 45,'9': 58} } print(person['name']) print(person['contacts']['qq']) print(person['contacts']['a']) print(person['contacts']['9'])用字典來保存一個人的信息遠遠優于使用列表或元組,因為我們可以用:前面的鍵來表示條目的含義,而:后面就是這個條目所對應的值。
2.構造式語法(使用內置函數dict創建字典)
# dict函數(構造器)中的每一組參數就是字典中的一組鍵值對 person = dict(name='安瀾', age=99999999, weight=9999999, home='帝城') print(person) # {name='安瀾', age=99999999, weight=9999999, home='帝城'}3.通過Python內置函數zip壓縮兩個序列并創建字典
a = 'ABCDE' b = '12345' items1 = dict(zip(a, b)) # items1 = dict(zip('ABCDE', '12345')) print(items1) # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'} items2 = dict(zip('ABCDE', range(1, 10))) print(items2) # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}4.生成式語法創建字典
# 列表的生成式語法 list1 = [i for i in range(1, 10)] print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 字典的的生成式語法 student2 = {i: i ** 2 for i in range(1, 10)} print(student2) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}5.循環遍歷字典
想知道字典中一共有多少組鍵值對,仍然是使用len函數;如果想對字典進行遍歷,可以用for循環,但是需要注意,for循環只是對字典的鍵進行了遍歷.
student = {'name': '安瀾','age': 99999,'weight': 9999999,'office': '完美世界','home': '天淵原始帝城','tel': '喚我真名',} print(len(student)) # 6# 遍歷字典的鍵 for key in student.keys():print(key, student[key])# print(key) print('-' * 10) # 遍歷字典的值 for value in student.values():print(value) print('-' * 10) # 遍歷鍵值隊 for key, value in student.items():print(key, value) print('-' * 10)字典的運算
對于字典類型來說,成員運算和索引運算肯定是最為重要的,前者可以判定指定的鍵在不在字典中,后者可以通過鍵獲取對應的值或者向字典中加入新的鍵值對。
注意:字典的索引不同于列表的索引,列表中的元素因為有屬于自己有序號(下標),所以列表的索引是一個整數;字典中因為保存的是鍵值對,所以字典的索引是鍵值對中的鍵,通過索引操作可以修改原來的值或者向字典中存入新的鍵值對。
字典也使用了哈希存儲的方式,所以字典中的鍵必須是不可變類型,例如整數(int)、浮點數(float)、字符串(str)、元組(tuple)等類型的值;
列表(list)和集合(set)是不能作為字典中的鍵的,當然字典類型本身也不能再作為字典中的鍵,因為字典也是可變類型,但是字典可以作為字典中的值。
person = {'name': '安瀾','age': 99999,'weight': 9999999,'office': '完美世界','home': '天淵原始帝城','tel': '喚我真名' } # 檢查name和tel兩個鍵在不在person字典中 print('name' in person, 'tel' in person) # True False # 通過age修將person字典中對應的值修改為250 if 'age' in person:person['age'] = 250 print(person) # 通過索引操作向person字典中存入新的鍵值對 person['tel'] = '13122334455' person['signature'] = '哪怕背負天淵,需一手托原始帝城,我安瀾一樣無敵世間!'# 檢查person字典中鍵值對的數量 print(len(person)) # 7 # 對字典的鍵進行循環并通索引運算獲取鍵對應的值 for key in person:print(f'{key}: {person[key]}')需要注意,在通過索引運算獲取字典中的值時,如指定的鍵沒有在字典中,將會引發KeyError異常。這時我們可以所以get函數通過key獲取value,如果key不存在,返回空值,不會報錯。
# 使用get函數通過key獲取value時,如果key不存在,返回空值,不會報錯。 print(student.get('name')) print(student.get('bgy'))字典的方法
# 字典中的值又是一個字典(嵌套的字典) students = {1001: {'name': '狄仁杰', 'sex': True, 'age': 22, 'place': '山西大同'},1002: {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'},1003: {'name': '武則天', 'sex': False, 'age': 20, 'place': '四川廣元'} }# 使用get方法通過鍵獲取對應的值,如果取不到不會引發KeyError異常而是返回None或設定的默認值 print(students.get(1002)) # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'} print(students.get(1005)) # None print(students.get(1005, {'name': '無名氏'})) # {'name': '無名氏'}# 獲取字典中所有的鍵 print(students.keys()) # dict_keys([1001, 1002, 1003]) # 獲取字典中所有的值 print(students.values()) # dict_values([{...}, {...}, {...}]) # 獲取字典中所有的鍵值對 print(students.items()) # dict_items([(1001, {...}), (1002, {....}), (1003, {...})]) # 對字典中所有的鍵值對進行循環遍歷 for key, value in students.items():print(key, '--->', value)# 使用pop方法通過鍵刪除對應的鍵值對并返回該值 stu1 = students.pop(1002) print(stu1) # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'} print(len(students)) # 2 # stu2 = students.pop(1005) # KeyError: 1005 stu2 = students.pop(1005, {}) print(stu2) # {}# 使用popitem方法刪除字典中最后一組鍵值對并返回對應的二元組 # 如果字典中沒有元素,調用該方法將引發KeyError異常 key, value = students.popitem() print(key, value) # 1003 {'name': '武則天', 'sex': False, 'age': 20, 'place': '四川廣元'}# setdefault可以更新字典中的鍵對應的值或向字典中存入新的鍵值對 # setdefault方法的第一個參數是鍵,第二個參數是鍵對應的值 # 如果這個鍵在字典中存在,更新這個鍵之后會返回原來與這個鍵對應的值 # 如果這個鍵在字典中不存在,方法將返回第二個參數的值,默認為None result = students.setdefault(1005, {'name': '方啟鶴', 'sex': True}) print(result) # {'name': '方啟鶴', 'sex': True} print(students) # {1001: {...}, 1005: {...}}# 使用update更新字典元素,相同的鍵會用新值覆蓋掉舊值,不同的鍵會添加到字典中 others = {1005: {'name': '喬峰', 'sex': True, 'age': 32, 'place': '北京大興'},1010: {'name': '王語嫣', 'sex': False, 'age': 19},1008: {'name': '鐘靈', 'sex': False} } students.update(others) print(students) # {1001: {...}, 1005: {...}, 1010: {...}, 1008: {...}}跟列表一樣,從字典中刪除元素也可以使用del關鍵字,在刪除元素的時候如果指定的鍵索引不到對應的值,一樣會引發KeyError異常,具體的做法如下所示。
dict1 = {'a': 100, 'b': 200, 'c': 300} dict2 = {'d': 400, 'e': 500, 'f': 600, 'a': 250}# 更新(合并) dict1.update(dict2) print(dict1)# 刪除---->鍵必須存在,不存在會產生keyerror # del dict1['b'] # print(dict1) print(dict1.pop('b'))# 刪除末尾的鍵 dict2.popitem()字典的應用
案例:
1.輸入一段話,統計每個英文字母出現的次數。
# 1.輸入一段話,統計每個英文字母出現的次數。 # 方法1import string # 使用生成式生成字典:{所以小寫英文字母:0} results = {letter: 0 for letter in string.ascii_lowercase} # print(results) content = input('請輸入: ').lower() # .lower() 將輸入的字符串中的英文轉換為英文小寫。 # 遍歷循環輸入的元素 for ch in content:# 如果有元素在字典results中if ch in results:#值加1results[ch] += 1 # print(results) # 循環獲取字典results的鍵和值 for key, value in results.items():print(f'{key}: {value:>2d}次')# 方法2. sentence = input('請輸入一段話: ') counter = {} for ch in sentence:if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':counter[ch] = counter.get(ch, 0) + 1 for key, value in counter.items():print(f'字母{key}出現了{value}次.')2.輸入一段話,統計每個英文單詞出現的次數。
# 2.輸入一段話,統計每個英文單詞出現的次數。content = input('請輸入: ').replace(',', ' ') # 將輸入字符串中的“,”轉換成空格。便于以后拆分 content_now = content.split(' ') # 通過空格拆分 results = {letter: 0 for letter in content_now} # 建立字典 for word in content_now:if word in results:results[word] += 1 print(results) for key, value in results.items():print(f'{key}:{value}次')3.在一個字典中保存了股票的代碼和價格,找出股價大于100元的股票并創建一個新的字典。
dict1 = {} stocks = {'AAPL': 191.88,'GOOG': 1186.96,'IBM': 149.24,'ORCL': 48.44,'ACN': 166.89,'FB': 208.09,'SYMC': 21.29 }# 方法1. for key, value in stocks.items():if value > 100:dict1[key] = value print(dict1) # 字典的生成式語法創建 dict2 = {key: value for key, value in stocks.items() if value > 100} print(dict2)# 找出最大股價,最小股價的股票名稱, # 使用max函數,注意函數max,和min默認是比較鍵的大小。所以我們要指定比較方式”kry=“ # 方法1.找最大,最小 print(max(stocks, key=stocks.get)) # 找最大,按指定的值 print(min(stocks, key=stocks.get))# 方法2.# 可以通過Python內置函數zip壓縮兩個序列并創建字典,利用這個函數,我們將鍵和值相互換位, dict4 = dict(zip(stocks.values(), stocks.keys())) print(dict4)# 最大值和最小值的鍵。 # 鍵和值相互換位,比較是鍵(股價),輸出值(股票名)[1] print(max(zip(stocks.values(), stocks.keys()))[1]) print(min(zip(stocks.values(), stocks.keys()))[1]) # 分解動作 _, max_values = max(zip(stocks.values(), stocks.keys())) print(max_values)# 股價從大到小排序 # 字典排序,sorted() print(sorted(stocks, key=stocks.get, reverse=True))總結
以上是生活随笔為你收集整理的Python中字典的应用及相关操作!的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 快速压缩视频大小方法
- 下一篇: Yuma格式历书的总结
