做者|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/