Python dict(字典)

Python dict即字典,是一种非常有用的数据结构,相当于其他语言的Map,这种数据结构采用键值对(key-value)形式存储,具有非常快的查询速度,即使在数据量十分庞大的情况下也依然如此。

Python dict 形式:每一个元素都是键值对key:value,以”:”分割,元素之间以”,”作为分隔符,最后一个元素的”,”可以省略。 dict = {'Steve': 100, 'Johnson': 99, 'Peter': 90}

示例:

特性(博客最后将从实现方式来说明为什么是这样):

  • 键必须是唯一的,但值不必。
  • 键和值可以是任何数据类型,键必须是不可变的,如字符串、数字或者不包含可变元素的tuple,不能用list等可变元素。
  • 不允许一个键出现两次或多次,如果同一个键被赋值多次则最后一次赋的值将会被记
  • 具有非常快的查询速度

Python dict基本操作

>>> dict = {'Name': 'Steve', 'Height': '170cm', 'weight': '63kg'}
>>> dict['Name'] #按键访问
Steve
>>>dict['Nation'] #访问不存在的元素会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Nation'
>>> dict['Weight'] = '65kg'
>>> dict['Weight']
'65kg'
>>> del dict['Name'] #删除键Name 其值也会被一并删除
>>> dict.clear() #清空字典 还可以访问结果为{}
>>> del dict #删除字典 不能访问 因为执行该操作后字典不复存在

字典内置函数&方法

Python内置了以下操作字典的函数

函数

描述

len(dict)

计算字典元素个数,即键的总数。

str(dict)

输出字典,以可打印的字符串表示。示例'dict = {'Name': 'Steve', 'Height': '170cm', 'weight': '63kg'}'。

type(variable)

返回输入的变量类型,如果变量是字典就返回<class 'dict'>。

Python dict 提供了以下方法:

方法

说明

radiansdict.clear()

删除字典内所有元素

radiansdict.copy()

返回一个字典的浅复制

radiansdict.fromkeys(seq[,value])

创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

radiansdict.get(key, default=None)

返回指定键的值,如果值不在字典中返回default值

key in dict

如果键在字典dict里返回true,否则返回false

radiansdict.items()

以列表返回可遍历的(键, 值) 元组数组

radiansdict.keys()

以列表形式返回一个字典所有的键

radiansdict.setdefault(key, default=None)

和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

radiansdict.update(dict2)

把字典dict2的键/值对更新到dict里

radiansdict.values()

以列表返回字典中的所有值

pop(key[,default])

删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

popitem()

随机返回并删除字典中的一对键和值(一般删除末尾对)。

每个方法的详情,可以点开这里然后点每个方法的超链接: http://www.runoob.com/python3/python3-dictionary.html

从dict的实现方式来说明dict的特性

Python中的dict也即Java/C++/C#中的Map,其键值对的映射关系是通过哈希算法来实现的。哈希算法是一种计算式查找法,其基本思想是在关键字k和存储位置p之间建立一个对应关系H,使得p = H(K)。因此存储的时候先对k使用方法H(可以有多种方法这里不做详细介绍)计算出存储地址p,而需要访问的时候再根据对k做H运算以求得p。由于地址是通过约定好的方法H得出的,所以存储效率跟数据量没有关系,存取速度只跟H方法的复杂程度有关。

基于以上原因:

  • dict的键唯一 :因为每一个键都只对应一个地址,相同的键经由H方法计算出的地址一定相同。
  • 键必须是不可变的:键如果可变,则经由H方法计算出的地址也是可变,这样就导致键值对这种存储形式完全混乱。

也是基于以上原因,dict内部存放的顺序和key-value对放入的顺序是无关的,因为地址映射关系是由H得到的。而数组对放入元素的顺序是有关的,因为第一个元素被放在下标为0的地址,之后的每个元素的地址都会递增等同于元素类型长度的地址长度。如一维数组地址的计算方法:Loc(a[n]) = Loc(a[0]) + (n-1) * size

和list想比,dict有以下几个特点:

  • 查找和插入的速度极快,不会随着key的增加而变慢;
  • 需要占用大量的内存,内存浪费多。

dict是典型的以空间换时间的数据结构,这样的例子还有很多。

而list相反:

  • 查找和插入的时间随着元素的增加而增加;
  • 占用空间小,浪费内存很少。

上面的说明是基于数据结构来说明的,如果你没有相关知识理解起来可能有困难,你不妨看一下这篇教程: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143167793538255adf33371774853a0ef943280573f4d000

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • How to Use the TimeDistributed Layer for Long Short-Term Memory Networks in Python 译文

    How to Use the TimeDistributed Layer for Long Short-Term Memory Networks in Pyth...

    Steve Wang
  • 如何在Python中将TimeDistributed层用于Long Short-Term Memory Networks

    原文地址:https://machinelearningmastery.com/timedistributed-layer-for-long-short-ter...

    Steve Wang
  • TensorFLow基础:使用TensorBoard进行可视化学习

    TensorFlow涉及到的运算,往往是在训练庞大的神经网络过程中出现的复杂且难以理解的运算,为了方便对程序进行理解、调试和优化,tensorflow提供...

    Steve Wang
  • [Python]学习基础篇:字典

    (2).删除字典元素  方法1:del dict[‘key’]  若无没有key时,删除整个字典,该方法与dict.clear()的区别是del删除整个字典,字...

    py3study
  • 一分钟学Python|Python的字典

    字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号(**{})**中 ,格式如下所示:

    Python进击者
  • python学习笔记:字典

    一、字典是python中最灵活的内置数据结构类型,如果把列表看作是有序的对象集合,那么字典就是无序的集合,字典和列表的主要差别在于:字典当中的元素是通过键来存取...

    py3study
  • Python入门之字典的操作详解

    这篇文章主要介绍了Python 字典(Dictionary)的详细操作方法,需要的朋友可以参考下: Python字典是另一种可变容器模型,且可存储任意类型对象,...

    Jetpropelledsnake21
  • python字典

    本篇将介绍Python里面的字典,更多内容请参考:Python学习指南 Python是什么? Python内置了字典dict的支持,dict全称dicti...

    用户1174963
  • 10分钟教你用Python打造微信天气预报机器人

    最近武汉的天气越来越恶劣了。动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了。好了,自己动手,丰衣足食,我们来用Python打...

    短短的路走走停停
  • 10分钟教你用Python打造微信天气预报机器人

    最近武汉的天气越来越恶劣了。动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了。好了,自己动手,丰衣足食,我们来用Python打...

    用户1621951

扫码关注云+社区

领取腾讯云代金券