做者|Soner Yıldırım
編譯|VK
來源|Towards Data Sciencepython
數據結構是任何編程語言的關鍵部分。爲了建立健壯且性能良好的產品,必須很是瞭解數據結構。編程
在這篇文章中,咱們將研究Python編程語言的一個重要數據結構,即字典。數組
字典是鍵值對的無序集合。每一個項都有一個鍵和值。字典能夠看做是一個有特殊索引的列表。數據結構
鍵必須是惟一的和不可變的。咱們可使用字符串、數字(int或float)或元組做爲鍵。值能夠是任何類型。dom
考慮一個咱們須要存儲學生成績的案例。咱們能夠把它們存儲在字典或列表中。機器學習
使用字典可讓咱們經過提供學生姓名(key)來獲取每一個學生的成績。另外一方面,爲了可以得到某個學生的成績,咱們須要一個額外的列表。編程語言
新的列表包含學生的姓名,而且與成績列表的順序徹底相同。函數
所以,對於這種狀況,字典比列表更好。性能
在簡短的介紹以後,讓咱們從示例開始深刻研究字典。這些例子將涵蓋字典的特性,以及對它們進行操做的函數和方法。學習
咱們能夠經過在大括號之間提供0個或多個鍵值對來建立字典。
empty_dict = {} grades = {'John':'A', 'Emily':'A+', 'Betty':'B', 'Mike':'C', 'Ashley':'A'} grades {'Ashley': 'A', 'Betty': 'B', 'Emily': 'A+', 'John': 'A', 'Mike': 'C'}
咱們經過提供索引來訪問列表中的值。相似地,在字典中,經過使用鍵來訪問值。
grades['John'] 'A' grades.get('Betty') 'B'
keys方法用於獲取全部鍵。
grades.keys() dict_keys(['John', 'Emily', 'Betty', 'Mike', 'Ashley'])
返回對象是dict_keys對象,它是iterable類型。所以,咱們能夠在for循環中迭代它。
相似地,values方法返回全部值。
grades.values() dict_values(['A', 'A+', 'B', 'C', 'A'])
咱們不能對dict_keys 或dict_values進行索引操做,但咱們能夠將它們轉換爲一個列表,而後使用索引。
list(grades.values())[0] 'A'
items方法返回鍵值對。
grades.items() dict_items([('John', 'A'), ('Emily', 'A+'), ('Betty', 'B'), ('Mike', 'C'), ('Ashley', 'A')])
字典是可變的,因此咱們能夠更新、添加或刪除條目。更新或添加項的語法是相同的。若是字典中存在給定的鍵,則更新現有項的值。不然,將建立一個新項(即鍵值對)。
grades['Edward'] = 'B+' grades['John'] = 'B' grades {'Ashley': 'A', 'Betty': 'B', 'Edward': 'B+', 'Emily': 'A+', 'John': 'B', 'Mike': 'C'}
咱們也能夠將字典傳遞給update函數。字典將根據新字典中的項進行更新。舉個例子會更清楚。
考慮如下字典:
grades = {'John':'A', 'Emily':'A+', 'Betty':'B', 'Mike':'C'} grades_new = {'John':'B', 'Sam':'A', 'Betty':'A'}
若是咱們根據grades_new更新grades ,John和Betty的值也會更新。此外,還將添加新項('Sam':'a')。
grades.update(grades_new) grades {'Betty': 'A', 'Emily': 'A+', 'John': 'B', 'Mike': 'C', 'Sam': 'A'}
咱們可使用del或pop函數刪除項。咱們只傳遞要刪除的項的鍵。
del(grades['Edward']) grades.pop('Ashley') 'A' grades 'Betty': 'B', 'Emily': 'A+', 'John': 'B', 'Mike': 'C'}
與del函數不一樣,pop函數返回已刪除項的值。所以,咱們能夠選擇將其分配給一個變量。
咱們能夠迭代字典。默認狀況下,迭代基於鍵。
for i in grades: print(i) John Emily Betty Mike
咱們也能夠對值進行迭代(grades.values()或grades.items()).
它相似於列表生成式。字典生成式是一種基於iterables的字典建立方法。
{x: x**2 for x in range(5)} {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} {word: len(word) for word in ['data','science','is','awesome']} {'awesome': 7, 'data': 4, 'is': 2, 'science': 7}
iterable中的元素成爲字典的鍵。這些值是根據字典生成式中的賦值肯定的。
咱們可使用列表或元組列表建立字典。
a = [['A',4], ['B',5], ['C',11]] dict(a) {'A': 4, 'B': 5, 'C': 11} b = [('A',4), ('B',5), ('C',11)] dict(b) {'A': 4, 'B': 5, 'C': 11}
Pandas的dataframe函數可用於使用字典建立數據幀。鍵變成列名,值變成行。
到目前爲止,咱們已經用值爲字符串的字典作了一些示例。可是,字典中的值能夠是任何類型,例如列表、numpy數組、其餘字典等等。
在從字典建立數據幀的狀況下,值由數組組成(例如list、numpy array)。
import numpy as np import pandas as pd dict_a = {'names':['Amber','John','Edward','Emily'], 'points':np.random.randint(100, size=4)} df = pd.DataFrame(dict_a) df
len函數返回字典中的項數(即長度)。clear方法用於刪除字典中的全部項,所以咱們將獲得一個空字典。
len(grades) 4 grades.clear() len(grades) 0
grades = {'John':'A', 'Emily':'A+', 'Betty':'B'} dict1 = grades dict2 = grades.copy() dict3 = dict(grades)
全部dict一、dict2和dict3都包含與分數徹底相同的鍵值對。然而,dict1只是一個指向grades的指針。所以,grades的任何變化也會改變dict1。
dict2和dict3是內存中獨立的對象,所以它們不會受到grades變化的影響。
咱們須要特別注意咱們如何複製字典。
Python3.9爲字典提供了merge(「|」)和update(「|=」)運算符。我尚未安裝Python 3.9,因此我將使用Python文檔中的示例:
>>> x = {"key1": "value1 from x", "key2": "value2 from x"} >>> y = {"key2": "value2 from y", "key3": "value3 from y"} >>> x | y {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'} >>> y | x {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
字典是Python中很是重要的數據結構,在許多狀況下都會用到。咱們在這篇文章中所作的例子將涵蓋你須要瞭解的字典的大部份內容。
然而,固然還有更多技巧。和其餘技能同樣,熟能生巧,你會在不斷練習中掌握。
原文連接:https://towardsdatascience.com/12-examples-to-master-python-dictionaries-5a8bcd688c6d
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/