zoukankan      html  css  js  c++  java
  • python之Dict和set类型

    Dict就是一种key:value的表格:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> print (d)
    {'Paul': 75, 'Adam': 95, 'Bart': 59, 'Lisa': 85}
    >>> print (len(d))
    4

    在这里的len()能够用来计算Dict的长度

    在Dict当中我们可以通过key来索引函数,只要key存在函数便会返回一个值:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> print (d['Addam'])
    Traceback (most recent call last):
      File "<pyshell#46>", line 1, in <module>
        print (d['Addam'])
    KeyError: 'Addam'
    >>> print (d['Adam'])
    95

    在上面如果你所输入的key在Dict当中不存在系统便会报错,在这个时候哦我们便有两种方法:

    一是先判断一下 key 是否存在,用 in 操作符:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> if 'Adam' in d:
        print (d['Adam'])
    
        
    95
    >>> if 'Adaam' in d:
        print (d['Adaam'])
    
        
    >>> 

    二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> print (d.get('Adam'))
    95
    >>> print (d.get('Adaa'))
    None

    dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。

    不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。

    由于dict是按 key 查找,所以,在一个dict中,key不能重复。

    dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> print (d)
    {'Paul': 75, 'Adam': 95, 'Bart': 59, 'Lisa': 85}

    打印的顺序不一定是我们创建时的顺序,而且,不同的机器打印的顺序都可能不同,这说明dict内部是无序的,不能用dict存储有序的集合。

    dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。

    如果使用list作为key便会出现报错的提醒:

    >>> d {[1,2,]:95}
    SyntaxError: invalid syntax

    Dict还有一个更新的功能,在这里:

    >>> d = {
        'Adam':95,
        'Lisa':85,
        'Bart':59,
        'Paul':75
    }
    >>> d['Paul'] = 72
    >>> print (d)
    {'Paul': 72, 'Adam': 95, 'Bart': 59, 'Lisa': 85}
    >>> d['Peter'] = 77
    >>> print (d)
    {'Paul': 72, 'Adam': 95, 'Peter': 77, 'Bart': 59, 'Lisa': 85}

    Dict也是一个被遍历的列表:

    >>> d = {'Adam':95}
    >>> for key in d:
        print (key)
    
        
    Adam

    dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。

    set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。

    >>> s = set(['A','B','C'])
    >>> print (s)
    {'C', 'A', 'B'}
    >>> s = set(['A'.'B','C','C',])
    SyntaxError: invalid syntax
    >>> s = set(['A','B','C','C'])
    >>> print (s)
    {'C', 'A', 'B'}

    s中的元素如果在建立的时候是重复的话,在使用的时候就会将重复的元素给去除。

    由于set存储的是无序集合,所以我们没法通过索引来访问。

    但是我们可以使用in来判断在set当中是否存在该元素。

    >>> s = set(['A','B','C'])
    >>> 'A' in s
    True
    >>> 'D' in s
    False

    set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

    set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

    最后,set存储的元素也是没有顺序的。

    set的这些特点,可以应用在哪些地方呢?

    星期一到星期日可以用字符串'MON', 'TUE', ... 'SUN'表示。

    假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢?

    如果使用if语句的话呢是十分繁琐的。

    >>> if x! = 'MON' and x! = 'TUE' and x! = 'WED'...and x! = 'SUN':
         print 'input error'
     else :

         print 'input ok'

    这样的话呢是十分繁琐的,这里我们如果使用set的话呢那便可以简便一些。

    >>> s = set(['MON','TUE','WED','TUR','FRI','SAT','SUN'])
    >>> if x in s:
        print ('input right')
    else:
        print ('input error')

    由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。

    >>> s = set([('Adam',95),('Lisa',85),('Bart',95)])
    >>> for k in s:
        print (k[0],":",k[1])
    
        
    Lisa : 85
    Adam : 95
    Bart : 95

    由于set是一种无序的集合所以我们拥有两种更新的方式:

    一是把新的元素添加到set中,二是把已有元素从set中删除。

    python在增加的时候需要使用那个add()函数,而在删除函数的时候需要使用remove()函数

    >>> s.add(('Ana',95))
    >>> print (s)
    {('Lisa', 85), ('Ana', 95), ('Adam', 95), ('Bart', 95)}
    >>> s.remove(('Adam',95))
    >>> print (s)
    {('Lisa', 85), ('Ana', 95), ('Bart', 95)}
  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/chang1203/p/5836641.html
Copyright © 2011-2022 走看看