zoukankan      html  css  js  c++  java
  • python第七天,dict

      在python里边创建字典的方法有如下几种:

    >>> dict1= dict((('F',70),('C',67),('h',104),('i',105),('s',115)))
    >>> print(dict1)
    {'F': 70, 'C': 67, 'h': 104, 'i': 105, 's': 115}
    >>> dict1['C']
    67
    >>> 
    >>> 
    >>> dict2 = {'F':70,'C':67,'h':104,'i':105}
    >>> dict2['C']
    67
    >>> 
    >>> a = dict(one=1,two=2,three=3)
    >>> a
    {'one': 1, 'two': 2, 'three': 3}
    >>> a['one']
    1
    >>> 
    >>> c = dict(zip(['one','two','three'],[1,2,3]))
    >>> c
    {'one': 1, 'two': 2, 'three': 3}
    >>> 
    >>> d = dict([('two',2),('one',1)])
    >>> d
    {'two': 2, 'one': 1}
    >>> 

      也可以通过fromkeys(S[,v])来进行创建一个字典,其中S是键,v是值,是可选的。

    # 通过键创建
    >>> dict01 = dict.fromkeys((1,2,3))
    >>> dict01
    {1: None, 2: None, 3: None}
    >>> 
    # 这里需要注意的是v这个值,不管你如何输入,他都会把这个地方的值看为一个,然后分别赋值给键
    >>> dict02 = dict.fromkeys((1,2,3),(2,3,4))
    >>> dict02
    {1: (2, 3, 4), 2: (2, 3, 4), 3: (2, 3, 4)}
    >>> 

      一般我们在使用的字典的时候,经常性会通过键来索引出它的值,例如

    dict0={'name':'jerry','sex':'girl','age':12}
    
    #那么 我们通过键取值时经常会用到 dict['name']这种方法来进行取值,但是当我们所取的键并不存在该字典中,就会报错,比如:
    print(dict0['phone'])
    
    Traceback (most recent call last):
      File "<pyshell#62>", line 1, in <module>
        dict0['phone']
    KeyError: 'phone'
    
    #那么我们如何可以避免这个问题,因为用这个返回给用户是一个不好的体验,我们想如果它不存在那么返回空,不报错,那我们就用到了get()方法。例如:
    >>> dict0.get('phone')
    >>> 
    >>> print(dict0.get('phone'))
    None
    >>> 

      关于字典的清空,.clear()和直接用一个{}进行重置的优缺点

    #假设我们有一个字典a
    >>> a={'name':'jerry'}
    >>> 
    >>> b=a
    >>> 
    >>> b
    {'name': 'jerry'}
    >>> 
    >>> a={}
    >>> a
    {}
    >>> b
    {'name': 'jerry'}
    >>> 
    #从上边的例子不难看出,当我们清空a之后,但是b是可以访问到以前的值的,我们可以理解为,b中还依然存放这那些值的指针,
    #而a只不过是将之前那个值的指针更换为一个新的指针。所以为了彻底清空那个值我们可以通过下面这个方法来清空
    >>> a = b >>> >>> a.clear() >>> >>> a {} >>> b {} >>>

      关于.copy()和直接赋值的区别

    #首先我们定义一个a
    >>> a={'name':'jerry'}
    #利用copy给b赋值
    >>> b=a.copy()
    #利用常规方法给c赋值
    >>> c=a
    >>> a
    {'name': 'jerry'}
    >>> b
    {'name': 'jerry'}
    >>> c
    {'name': 'jerry'}
    >>> 
    #从上边的打印可以看到他们三个全部一样,但是实际果真如此么?
    #我们通过给b添加一个新的键值对来看一下
    >>> b['age']=12
    >>> a
    {'name': 'jerry'}
    #a并没有改变 
    >>> b
    {'name': 'jerry', 'age': 12}
    >>> 
    #那我们给c一个新的键值对看一下
    >>> c['sex']='girl'
    >>> a
    #a是变化的
    {'name': 'jerry', 'sex': 'girl'}
    >>> c
    {'name': 'jerry', 'sex': 'girl'}
    >>> 
    #我们通过 id()来获取下他们三个的内存地址
    >>> id(a)
    48909912
    >>> id(b)
    48924136
    >>> id(c)
    48909912
    #从上边我们可以看出,a c的内存地址是一致的,
    #而b是新开辟了一个内存空间,所以当我们更改b的时候a并没有发生变化,
    #因为他们并不在一个内存空间,而c发生改变时a也会发生改变就不奇怪了
    >>> 

      和列表一样,字典也提供了pop()来进行删除元素,例如

    #删除指定键,并返回相应的值
    >>> a
    {'name': 'jerry', 'sex': 'girl'}
    >>> a.pop('sex')
    'girl'
    >>> a
    {'name': 'jerry'}
    >>> 
    
    #删除随机的一个键值对
    >>> a
    {'name': 'jerry', 'sex': 'girl'}
    >>> 
    >>> a.popitem()
    ('sex', 'girl')
    >>> a
    {'name': 'jerry'}
    >>> 

      setdefault(S[,v]),随机一个位置插入,当没有给值的时候,会默认给一个None

    >>> a
    {'name': 'jerry'}
    >>> a.setdefault('小白')
    >>> a
    {'name': 'jerry', '小白': None}
    >>> a.setdefault('sex','girl')
    'girl'
    >>> 
    >>> a
    {'name': 'jerry', '小白': None, 'sex': 'girl'}
    >>> 

      update(dict),是利用一个字典来更新另一个字典。

    >>> a
    {'name': 'jerry', '小白': None, 'sex': 'girl'}
    >>> 
    >>> b={'phone':123456}
    >>> b
    {'phone': 123456}
    #利用b字典来更新a这个字典
    >>> a.update(b)
    >>> a
    {'name': 'jerry', '小白': None, 'sex': 'girl', 'phone': 123456}
    >>> 
  • 相关阅读:
    WINREG.H 编译出错
    WINREG.H 编译出错
    JS创建对象的几种方式
    清除radio单选框外边距
    Dragging MovieClips
    Cannot Say No
    分层提高软件系统的可测试性
    如何从技术上掌控项目?
    领导我只需要你告诉我你要做什么,怎么做让我来好吗?
    如何依据框架进行任务分解
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/8643224.html
Copyright © 2011-2022 走看看