dict和set的使用

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'了。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值