dict和set的使用
来源:互联网 发布:武汉人工智能峰会 编辑:程序博客网 时间:2024/06/08 12:57
dict
python内置了字典:dict,全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
把数据放入字典的方法,除了初始化指定以外,还可以通过key放入:
d['adam']=100
print d['adam']
100
一个key只能对应一个value,所以多次对一个key放入value会把之前的值冲掉。
要避免key不存在的错误,有两种方法,一种是通过in判断key是否存在:
'adam' in d
False
第二种是通过dict提供的get方法,如果key不存在,可以返回None,或自己指定的value:
d.get('adam') 返回None的时候python的交互式命令行不显示结果。
d.get('adam',-1)
要删除一个key,用pop(key)方法,对应的value也会从dict中删除。
dict内部存放的顺序和key的放入顺序是没有关系的。
dict和list的比较:
dict的特点:
1、查找和插入的速度极快,不会随着key的增加而变慢;
2、需要占用大量的内存,内存浪费多。
list的特点:
1、查找和插入的时间随着元素的增加而增加;
2、占用空间小,浪费内存少。
dict可以用在需要高速查找的地方,需要牢记的第一条就是dict的key必须是不可变对象。因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(hash)
要保证hash的正确性,作为key的对象就不能变,在python中,字符串、整数等都是不可变的,因此可以放心的作为key。而list是可变的,就不能作为key。
set
set和dict类似,也是一组key集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
s=set([1,2,3])
print s
{1,2,3} 传入参数是一个list,而显示的结果告诉我们这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。
重复元素在set中自动被过滤:
s=set([1,1,2,2,3,4])
print s
{1,2,3}
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果。
通过remove(key)方法可以删除元素:
s.remove()
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
s1=set([1,2,3])
s2=set([2,3,4])
print s1 & s2
{2,3}
print s1|s2
{1,2,3,4}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变的对象是否相等 ,也就无法保证set内部不会有重复的元素。
不可变对象
对于不可变对象,比如str,我们进行如下操作:
a='abc'
print a.replace('a','A')
'Abc'
print a
'abc'
当我们调用a.replace('a', 'A')
时,实际上调用方法replace
是作用在字符串对象'abc'
上的,而这个方法虽然名字叫replace
,但却没有改变字符串'abc'
的内容。相反,replace
方法创建了一个新字符串'Abc'
并返回,如果我们用变量b
指向该新字符串,就容易理解了,变量a
仍指向原有的字符串'abc'
,但变量b
却指向新字符串'Abc'
了。
- dict和set的使用
- dict和set的使用
- 使用dict和set
- 使用dict和set
- 使用dict和set
- 使用dict和set
- Python--使用dict和set
- 八、使用dict和set
- python使用dict和set
- Python——使用dict和set
- python学习笔记 使用dict和set
- python里面的dict和set
- dict和set的key不可变
- 4.dict和set
- Dict和Set类型
- dict和set
- dict(字典)和set
- python dict和set
- 欢迎使用CSDN-markdown编辑器
- django rest framework 应该有多个数据却显示null
- tensorflow 实现人脸识别(facenet)
- Scrapy框架的一些学习心得
- 树
- dict和set的使用
- Java学习笔记(14)--String类详解(一)
- Shell命令、函数与流程控制
- Buffer缓冲和Cache缓存的区别
- 查看java 字节码(尝试阅读之初体验)
- 拿到view真实宽高的4种方式
- 50个提高PHP执行效率的技巧 【转载】
- 博客已移到http://www.cnblogs.com/Serene-shixinyi/
- 解决springmvc往界面传输数据时,UI界面接到是乱码问题