作者|Soner Yıldırım
编译|VK
起源|Towards Data Science

数据结构是任何编程语言的要害局部。为了创立强壮且性能良好的产品,必须十分理解数据结构。

在这篇文章中,咱们将钻研Python编程语言的一个重要数据结构,即字典。

字典是键值对的无序汇合。每个项都有一个键和值。字典能够看作是一个有非凡索引的列表。

键必须是惟一的和不可变的。咱们能够应用字符串、数字(int或float)或元组作为键。值能够是任何类型。

思考一个咱们须要存储学生问题的案例。咱们能够把它们存储在字典或列表中。

应用字典能够让咱们通过提供学生姓名(key)来获取每个学生的问题。另一方面,为了可能取得某个学生的问题,咱们须要一个额定的列表。

新的列表蕴含学生的姓名,并且与问题列表的程序完全相同。

因而,对于这种状况,字典比列表更好。

在简短的介绍之后,让咱们从示例开始深入研究字典。这些例子将涵盖字典的个性,以及对它们进行操作的函数和办法。

1.创立字典

咱们能够通过在大括号之间提供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'}

2.拜访值

咱们通过提供索引来拜访列表中的值。相似地,在字典中,通过应用键来拜访值。

grades['John']'A'grades.get('Betty')'B'

3.拜访所有值或所有键

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')])

4.更新或增加项

字典是可变的,所以咱们能够更新、增加或删除条目。更新或增加项的语法是雷同的。如果字典中存在给定的键,则更新现有项的值。否则,将创立一个新项(即键值对)。

grades['Edward'] = 'B+'grades['John'] = 'B'grades{'Ashley': 'A', 'Betty': 'B', 'Edward': 'B+', 'Emily': 'A+', 'John': 'B', 'Mike': 'C'}

5.应用新字典更新

咱们也能够将字典传递给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'}

6.删除项

咱们能够应用del或pop函数删除项。咱们只传递要删除的项的键。

del(grades['Edward'])grades.pop('Ashley')'A'grades'Betty': 'B', 'Emily': 'A+', 'John': 'B', 'Mike': 'C'}

与del函数不同,pop函数返回已删除项的值。因而,咱们能够抉择将其调配给一个变量。

7.字典作为iterable

咱们能够迭代字典。默认状况下,迭代基于键。

for i in grades:    print(i)    JohnEmilyBettyMike

咱们也能够对值进行迭代(grades.values()grades.items()).

8.字典生成式

它相似于列表生成式。字典生成式是一种基于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中的元素成为字典的键。这些值是依据字典生成式中的赋值确定的。

9.从列表创立字典

咱们能够应用列表或元组列表创立字典。

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}

10.从字典到数据帧

Pandas的dataframe函数可用于应用字典创立数据帧。键变成列名,值变成行。

到目前为止,咱们曾经用值为字符串的字典做了一些示例。然而,字典中的值能够是任何类型,例如列表、numpy数组、其余字典等等。

在从字典创立数据帧的状况下,值由数组组成(例如list、numpy array)。

import numpy as npimport pandas as pddict_a = {'names':['Amber','John','Edward','Emily'],         'points':np.random.randint(100, size=4)}         df = pd.DataFrame(dict_a)df

11.len和clear

len函数返回字典中的项数(即长度)。clear办法用于删除字典中的所有项,因而咱们将失去一个空字典。

len(grades)4grades.clear()len(grades)0

12.复制字典

grades = {'John':'A', 'Emily':'A+', 'Betty':'B'}dict1 = gradesdict2 = grades.copy()dict3 = dict(grades)

所有dict1、dict2和dict3都蕴含与分数完全相同的键值对。然而,dict1只是一个指向grades的指针。因而,grades的任何变动也会扭转dict1。

dict2和dict3是内存中独立的对象,因而它们不会受到grades变动的影响。

咱们须要特地留神咱们如何复制字典。

益处:应用python3.9合并和更新操作符

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.co...

欢送关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/