资讯专栏INFORMATION COLUMN

python 数据类型 - dict 字典

Alfred / 2059人阅读

摘要:内置了字典的支持。字典的键值必须是可哈希的。当不提供任何参数时,创建的是一个空字典。例如函数获取字典中指定的值,如果不存在则返回默认值。删除中的元素语法形式清空字典中的所有元素,字典仍存在,只不过为空字典。

Dict 字典 概述

dict全称dictionary。Python内置了字典dict的支持。

dict是一种映射类型,可以将一个物件和另外一个东西关联起来,组成一个key-value 数据对,而不管他
们各自的类型是什么。

字典的键值key必须是可哈希的。数字和字符串可以作为键值,但是列表和其他字典不可以。

键key具备唯一性,一个dict中key值唯一,当key发生冲突时,取最后该key的赋值value。

dict是无序的、可变的,使用键-值(key-value)对存储,具有极快的查找速度。

与list相比:在list中查找元素的方法,list越大,查找越慢。但是dict的实现方式,根据key值计算出value的存放位置,然后再去取存放位置的值。一个key只能对应一个value值,提高了查找速度。


一、创建字典 1、直接创建

2、使用dict()创建 使用dict创建,提供的参数必须成对出现。当不提供任何参数时,创建的是一个空字典。 例如dict(([1,’x’],[2,’y’]))、dict(zip((1,2),(‘x’,’y’)))。

3、fromkeys(key,value)创建


二、操作 (1) for 循环 for循环遍历字典的key,例如:
for key in dict_name:
    print(dict_name[key])
    # 根据字典键key进行排序输出
    for key in sorted(dict_name):    # 是sorted(),不是sort()
        print(dict_name[key])
(2)in 关键字 通过in关键字,判断某键值key是否存在,返回True or False。例如
"pi" in d
False
(3)get( key,default=None) get()函数获取字典中指定key的value值,如果不存在则返回默认值。 同时也可以自己制定默认返回值,例如get("pi",0),当存在key为pi时,则返回0.
>>> d.get("xiong")    # 也可以直接  d["xiong"]
90
>>> d.get("pi",0)     # 自己指定。如果不存在该key,就返回0,存在返回原值。
0
(4)dict更新 当dict里存在list类型时,可以把list当作一个item,且可以对其进行list的操作。例如:
inventory = {
    "gold" : 500,
    "pouch" : ["flint", "twine", "gemstone"],
    "backpack" : ["xylophone","dagger", "bedroll","bread loaf"]
}
# 新添加一个key-value
inventory["burlap bag"] = ["apple", "small ruby", "three-toed sloth"]
inventory["gold"] += 50
inventory["backpack"].sort()
inventory["backpack"].remove("dagger")
(5)pop():删除dict中的key-value,指定或者默认key。
>>> d = {"xiong":90,"li":95,"ping":100}
>>> d.pop("xiong")
90
>>> d
{"li": 95, "ping": 100}
(6)del:删除dict中的元素 语法形式:del dict_name[key_name]
>>> del  d["ping"]
>>> d
{"li": 95}
(7)clear() clear()清空字典中的所有元素,字典仍存在,只不过为空字典。
# 语法形式
>>> dict_name.clear()
(8)len() 统计一个dict的长度,即统计有多少个键值对,使用形式:len(dict_name) (9)❤ dict的三个方法:keys()、values()、items() keys()、values()、items()3个方法返回值类型不再是列表,而是视图对象(view objects)。其中: keys():返回dict_keys对象,可以查看字典的所有key,使用方法:dict_name.keys()。 values():返回dict_keys对象,可以查看字典的value,使用方法:dict_name.values()。 items():返回dict_items对象,可以查看字典所有的(key,value)二元元祖,dict.items()。 例如:
>>> d_1 = {1:"x",2:"y",3:"z"}
>>> d_1.keys()
dict_keys([1, 2, 3])
>>>
>>> d_1.values()
dict_values(["x", "y", "z"])
>>>
>>> d_1.items()
dict_items([(1, "x"), (2, "y"), (3, "z")])
>>>
>>> type(d_1.keys()),type(d_1.values()),type(d_1.items())
(, , )
视图对象可以动态查看字典的内容,每次字典变化时,视图会自动更改:

(10)copy():字典拷贝

例如现在有dict1,要创建一个一样的dict2,我们可以通过赋值操作“=”来创建一个内容一样的dict2,但是修改dict2的值会该表dict1的值:

>>> dict1 = {"up":"down","right":"left","true":"false"}
>>> dict2 = dict1
>>> dict2["up"]="change"  #对赋值而来dict2的修改会同时修改dict1(源) 
>>> dict1
{"up": "change", "right": "left", "true": "false"}

这是为什么呢?可以看下图,通过赋值操作“=”创建的新的字典变量,其指向的id都是一样的,所以当修改新变量的内容引用时,源指向的id内容也发生了改变。

如果要想修改新创建的变量而不影响源变量,可以使用copy()。例如,如下copy的值不会修改dict1的值

>>> dict1 = {"up":"down","right":"left","true":"false"}
>>> copy = dict1.copy()    # 字典copy是对dict1的拷贝
>>> copy["up"] = "change2"
>>> dict1                  # 对拷贝的copy字典修改不会修改源字典
{"up": "change", "right": "left", "true": "false"}
总结:

dict内部存放的顺序和key放入的顺序是没有关系的,即dict是无序的。

dict查找和插入的速度极快,不会随着key的增加而变慢,平均复杂度为O(1)。

dict需要占用大量的内存,内存浪费多。

而list相反:

查找和插入的时间随着元素的增加而增加,时间复杂度为O(n)

占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。


三、注意陷阱

❤ 在有些python中,dict并不一定会按照键-值的添加顺序来保存元素的顺序。
若要保证字典的顺序性,则可以使用Python标准库collections模块OrderDict的有序字典。
使用方式:

from collections import OrderDict
OrderDict().keys()

❤ 在复制和遍历字典时,最坏情况的复杂度为O(n),n为字典曾经达到的最大元素数目,而不是当前字典的大小。So此时遍历这个字典可能需要花相当长的时间。如果要频繁地遍历这个字典,最好的方式是创建一个新的字典对象,而不是在旧的字典中对元素进行操作,删除元素。


❤持续更新ing...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42267.html

相关文章

  • python基础教程:dict(字典)

    摘要:字典的创建字典可以通过或一对花括号创建一个空字典。方法是字典对象名称加方括号括起来的键名,比如。空字典的长度是和类似于对列表的操作,不过这两个函数检验的是字典的键。修改了字典并没有重新获取,但是已经反应了变化,多了返回值的对象,。 字典(dict, dictionary的简写)是Python中另一个非常重要的内置数据类型,是Python中映射类型(Mapping Type),它把键(k...

    pumpkin9 评论0 收藏0
  • Python数据结构:字典

    摘要:如果要把一个对象放入散列表,那么首先要计算这个元素的散列值。总结这一篇主要介绍了常见的字典方法如何处理查不到的键标准库中类型的变种散列表的工作原理散列表带来的潜在影响参考链接最后,感谢女朋友支持。 这一篇是《流畅的 python》读书笔记。主要介绍: 常见的字典方法 如何处理查不到的键 标准库中 dict 类型的变种 散列表的工作原理 泛映射类型 collections.abc...

    BlackFlagBin 评论0 收藏0
  • python-数据类型字典

    摘要:删除字典元素和字典删除键为的条目删除中所有的条目删除整个字典删除并返回键为的条目二字典相关函数工厂方法工厂函数被用来创建字典。与函数方法相似,如果字典中键存在,删除并返回,如果键不存在,且没有给出的值,引发异常。 Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典(一)字典的增删改查(1)字典的创建key:(不可变类型)数字、字...

    SmallBoyO 评论0 收藏0
  • [零基础学Python]字典,你还记得吗?

    摘要:字典,这个东西你现在还用吗随着网络的发展,用的人越来越少了。最早的名字叫伍记小字典,但未能编纂完成。新华字典由商务印书馆出版。成为迄今为止世界出版史上最高发行量的字典。也被称为关联数组或哈希表。 字典,这个东西你现在还用吗?随着网络的发展,用的人越来越少了。不少人习惯于在网上搜索,不仅有web版,乃至于已经有手机版的各种字典了。我曾经用过一本小小的《新华字典》。 《新华字典》是...

    galaxy_robot 评论0 收藏0
  • python学习笔记 关于字典

    摘要:如果两个对象是相同的,那么它们的散列值一定是相同的。也就是说,一个可散列对象必须同时满足以下三个条件支持方法,并且通过方法所获得的散列值是不变的支持通过方法来判断两个对象的值是否相等若,则必有。 字典 dict类型是python语言的基石,所以python对于dict类型实现了高度优化,而 散列表 则是字典类型性能突出的根本原因。 什么是可散列的数据类型 定义:如果一个对象是可散列的...

    cnsworder 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<