Python dict & set

1        Dict和Set

1.1   Dict(无序键值不可重复)

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = [‘Michael‘, ‘Bob‘, ‘Tracy‘]

scores = [95, 75, 85]

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。

如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢,类似redis key value,所以查询速度极快。

>>> d={1:98,2:90,3:88}   --大括号,逗号分隔,冒号表示对应

>>> d[1]

98

>>> d[2]

90

修改dict中key的value

>>> d[1]=100

>>> d

{1: 100, 2: 90, 3: 88}

>>> d[1]

100

在编程中,为了更好的容错性,可能需要判断这个key在dict中是否存在

1.key in dict

>>> d

{1: 100, 2: 90, 3: 88}

>>> 4 in d

False

2.dict.get(key)

>>> d.get(4)  --没有则没有回显

>>> d.get(4,-1)

-1

>>> d.get(4,-2)

-2

删除dict中key

>>> d

{1: 100, 2: 90, 3: 88}

>>> d.pop(3)

88

>>> d

{1: 100, 2: 90}

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

查找和插入的速度极快,不会随着key的增加而变慢;

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

而list相反:

查找和插入的时间随着元素的增加而增加;

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

dict内部存放的顺序和key放入的顺序是没有关系的.

所以,dict是用空间来换取时间的一种方法。

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

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

1.2   Set(无序不可重复)

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合。

>>> s=set([1,2,3])

>>> s

{1, 2, 3}

>>> len(s)

3   表示3个key

重复的key在set被自动过滤

>>> s=set([1,2,3,3])

>>> s

{1, 2, 3}

在set中添加key,重复添加同一个key无效

>>> s

{1, 2, 3}

>>> s.add(4)

>>> s

{1, 2, 3, 4}

>>> s.add(4)

>>> s

{1, 2, 3, 4}

删除key

>>> s

{1, 2, 3, 4}

>>> s.remove(4)

>>> s

{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合。

set的交集,并集操作

>>> s1=set([1,2,3])

>>> s2=set([2,3,4])

>>> s1 & s2

{2, 3}

>>> s1 | s2

{1, 2, 3, 4}

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象。

PS:再议不可变对象

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

>>> a=‘abc‘

>>> a.replace(‘ab‘,‘AB‘)   --调用replace方法

‘ABc‘

>>> a

‘abc‘                  --变量a并未发生变化

>>> a=‘abc‘

>>> b=a.replace(‘ab‘,‘AB‘)

>>> b

‘ABc‘

>>> a

‘abc‘

Python dict & set

时间: 2024-10-23 10:25:04

Python dict & set的相关文章

Python Dict用法

Operation Result len(a) the number of items in a 得到字典中元素的个数 a[k] the item of a with key k 取得键K所对应的值 a[k] = v set a[k] to v 设定键k所对应的值成为v del a[k] remove a[k] from a 从字典中删除键为k的元素 a.clear() remove all items from a 清空整个字典 a.copy() a (shallow) copy of a 得

Python dict 以 1和True 作为键值的比较

运行环境: 操作系统:Win7 64位 Python版本: 2.7.12 IDE:pycharm 2017.2 测试代码: 测试Python dict 1 和 True 作为键值 测试 demo 如下: #!/usr/bin/env python# -*- coding:utf-8 -*- __author__ = "liukang" dict_test = {}print dict_testdict_test[1] = 1print dict_testdict_test[True]

python dict 排序

我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排.到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法. python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数. sort函数和sorted函数唯一的不同是,sort是在容器内(in-place)排序,so

python dict 字典详解

和列表相同,字典也是许多数据的集合,属于可变序列类型.不同之处在于,它是无序的可变序列,其保存的内容是以“键值对”的形式存放的. 字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”. 字典类型很像学生时代常用的新华字典.我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字.其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值. 表 1 Python 字典特征 主要特征 解释 通过键而不是通过索引来读取元素 字

Python dict.has_key() 的说明

Python dict.has_key()方法仅限于Python 2.x使用,对于3.x,此方法已废除. 对于Python 2.x中的dict.has_key()方法,官方文档的说明如下:https://docs.python.org/2/library/stdtypes.html#mapping-types-dict 对于Python 3.x中的dict相关方法,官方文档的说明如下:https://docs.python.org/3.7/library/stdtypes.html#mappin

(翻译)如何对python dict 类型按键(keys)或值(values)排序

如何对dict类型按键(keys)排序(Python 2.4 或更高版本): mydict = {'carl':40, 'alan':2, 'bob':1, 'danny':3} for key in sorted(mydict.iterkeys()): print "%s: %s" % (key, mydict[key]) 结果: alan: 2 bob: 1 carl: 40 danny: 3 摘自 Python FAQ: http://www.python.org/doc/faq

python dict

#!/usr/bin/env python # --*-- encoding:utf-8 --*-- dicta = {'aaa':'bb','age':13} #索引 print(dicta['aaa']) #len print(len(dicta)) #for for i in dicta:#默认循环key print(i) for i in dicta.keys():#循环key print(i) for i in dicta.values():#循环value print(i) for

python dict{}和set([])

200 ? "200px" : this.width)!important;} --> 介绍 dict(dictionary),在其他语言中也称为map,使用键-值(key-value)存储.set和dict类似,也是一组key的集合,但不存储value.字典和set的key都是不允许重复且key不能是列表. 一.dict(字典的缩写) 字典和前面讲的list(列表)很相似,但是list不存在value,同时字典也和xml.json很像.字典使用一对大括号表示 1.创建字典表 创

python dict 与list比较

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 通过help(dict)可以查找dict有关的函数操作 例如: dt  = dict(name='test', age=20, score=90) 特别注意:1.dict内部存放的顺序和key放入的顺序是没有关系的.                   2.dict的key必须是不可变对象(dict根据key来计算value的存储位置,这个