第四章 字典-当索引不好用时

4.0  

  字典可以理解成是C++里的map,可以映射任何类型。字典这种结构类型称为映射(mapping)。

  字典是Python中唯一内建的映射类型,字典中的值并没有特殊顺序,但是都是存在一个特定的键里。键可以是数字、字符串甚至是元组。

4.1-4.2 了解创建和使用字典

{

   >>> phonebook = {'Alice':'2345' ,'Beth':'9102' ,'Cecil':'3258'}

   >>> phonebook['Alice']

   '2345'

   >>> phonebool['asd']

   Traceback (most recent call last):

   File "<pyshell#2>", line 1, in <module>

   phonebool['asd']

   NameError: name 'phonebool' is not defined

}

4.2.1 dict函数

    可以通过dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

      >>> items = [('name' ,'Gumby') ,('age' ,42)]

      >>> d = dict(items)

      >>> d

      {'name': 'Gumby', 'age': 42}

      >>> d['name']

      'Gumby'

    dict函数也可以通过关键字参数来创建字典

     >>> d = dict(name='Gumby' ,age=42)
>>> d
{'name': 'Gumby', 'age': 42}


4.2.2 基本字典操作

       len(d)
  d[k]
  d[k]= v
  k in d  k是键不是值
  键类型:其他不可变类型

4.2.3 格式化字符  
phonebook = {\
'Beth' : '9102' ,'Alice' : '2341' ,'Cecil' : '3258'\
}
"Cecil's phone number is %(Cecil)s." % phonebook

"Cecil's phone number is 3258."


替换html里面变量
{
  >>> template = '''<html>
  <head><title>%(title)s</title></head>
  <body>
  <hl>%(title)s</hl>
  <p>%(text)s</p>
  </body>'''
  >>> data = {'title':'Mu Home Page' ,'text':'Welcome to my home page!'}
  >>> print (template % data)
  <html>
  <head><title>Mu Home Page</title></head>
  <body>
  <hl>Mu Home Page</hl>
  <p>Welcome to my home page!</p>
  </body>
  >>> 

4.2.4 字典方法

1.clear 

{
A:
  >>> d = {}
  >>> d['name'] = 'Gumby'

        >>> d['age'] = 42
  >>> d
  {'name': 'Gumby', 'age': 42}

        >>> return_value = d.clear()
   >>> d
  {}
  >>> print(return_value)
  None

B:
  >>> x = {}
  >>> y = x
  >>> x['key'] = 'value'
  >>> y
  {'key': 'value'}
  >>> x = {}
  >>> y
  {'key': 'value'}
  >>> x
  {}
C:
  >>> x = {}
  >>> y = x
  >>> x['key'] = 'value'
  >>> y
  {'key': 'value'}
  >>> x.clear()
  >>> y
  {}
  >>> x
  {}   

}

2.
A:copy(浅复制) 
<注意一个问题,虽然是浅复制,但是=并不能导致值修改的同步,用方法才行>
{
>>> x = {'username':'admin' ,'machines':['foo' ,'bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'machines': ['foo', 'baz'], 'username': 'mlh'}
>>> x
'machines': ['foo', 'baz'], 'username': 'admin'}
>>> 
}

B:deepcopy 这个可以理解成是真正的把值拷贝过去
{
>>> from copy import deepcopy
>>> d = {}
>>> d['name'] = ['Alfred' ,'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d);
>>> d['name'].append('CVasdsa')
>>> c
{'name': ['Alfred', 'Bertrand', 'CVasdsa']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
>>> 
}

3.fromkeys

   fromkeys方法使用给定的键建立新的字典,每个键默认对应的值是None

   {

     >>> {}.fromkeys(['name','age'])

     {'name': None, 'age': None}

     >>> dict.fromkeys(['name','age'])

     {'name': None, 'age': None}

     >>> #默认值

     >>> dict.fromkeys(['name','age'] ,'(unknown)')

     {'name': '(unknown)', 'age': '(unknown)'}

   >>> 

   }

4.get

  更宽松的访问字典的方法,不存在不会报错,而且支持默认参数

  {

    >>> d = {}

    >>> print(d['name'])

    Traceback (most recent call last):

    File "<pyshell#82>", line 1, in <module>

    print(d['name'])

    KeyError: 'name'

    >>> print(d.get('name'))

    None

    >>> print(d.get('name','N/A'))

    N/A

  }

5.has_key 判断键在不在(3.0之上的版本不支持,我下面给出2.7.6的例子) 

 {

    >>> d = {}

    >>> d.has_key('name')

    False

    >>> d.has_key('name')

    True

  }

6.items和iteritems

    items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自于(键,值)

    但是项在返回时并没有特殊的顺序。

   {

      >>> d = {'title':'Python web stre' ,'url' : 'http://www.python.org' ,'spam':0}

      >>> d.items()

      dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web stre')])

      >>> #iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表

      <但是 什么鬼? 编译错误了!>

      >>> it = d.iteritems()

      Traceback (most recent call last):

      File "<pyshell#15>", line 1, in <module>

      it = d.iteritems()

   }


7.keys和iterkeys

  keys方法将字典中的键以列表方式返回,而iterkeys则返回针对键的迭代器。

 {

   >>> d = {'x':1 ,'y' :2}

   >>> d.keys()

   dict_keys(['y', 'x'])

   >>> it = d.iterkeys()

   Traceback (most recent call last):

   File "<pyshell#4>", line 1, in <module>

   it = d.iterkeys()

   AttributeError: 'dict' object has no attribute 'iterkeys'  

  }
 

8.pop

  pop方法返回字典的给定键的值,并且从字典中把这个键值对删除。

  {

    >>> d = {'x':1 , 'y':2}

    >>> d.pop('x')

    1

    >>> d

    {'y': 2}

  }


9.popitem

  随机弹出来一组键值对,因为存数不是序列的,所以不能控制顺序。

  <注意和pop的区别,pop是弹出来一个指定键的,poptiem是随机弹出来一个删除>

  {

     >>> d = {

           'url':'http://www.python.org' ,'spam':0 ,'title':'Python Web Site'
    }
>>> d.popitem()
('title', 'Python Web Site')
>>> d
{'url': 'http://www.python.org', 'spam': 0}
>>> 

  }
 

10.setdefault

  setdefault方法设定值,如果存在那就不修改,否则就增加上,如果默认参数是空,那么就默认None


  {

    >>> d = {}

    >>> d.setdefault('name' ,'N/A')

    'N/A'

    >>> d

    {'name': 'N/A'}

    >>> d['name'] = 'Gumby'

    >>> d.setdefault('name' ,'N/A')

    'Gumby'

    >>> d

    {'name': 'Gumby'}

   }
 


11.update

  update方法可以利用一个字典项更新另一个字典项:

  <有就覆盖,没有就直接增加>

  {

     >>> d = {

              'title':'Python Web Site',

              'url' : 'http://www.python.org',

              'changet':'Mar 14 22:09:15 MET 2008'
      }

    >>> x = {'title' : 'Python Language Website'}

    >>> d.update(x)

    >>> d

   {'changet': 'Mar 14 22:09:15 MET 2008', 'url': 'http://www.python.org', 'title': 'Python Language Website'}

 }


12.values和itervalues 

   返回value,一个是列表,一个是索引

    {

       >>> d = {}

       >>> d[1] = 1

       >>> d[2] = 2

       >>> d[3] = 3

       >>> d[4] = 1

       >>> d.values()

       dict_values([1, 2, 3, 1])      

    }

 

Python第四章-字典的更多相关文章

  1. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  2. 《Python基础教程(第二版)》学习笔记 -> 第四章 字典

    字典是Python中唯一内建的映射类型. 字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用: 表征游戏棋盘 ...

  3. Python基础 第四章 字典(2)字典方法&章小结

    1. clear 方法clear删除所有的字典项,就地执行,什么都不返回(或者说返回None) d = {} d['name'] = 'Gumby' d['age'] = 42 print(d) re ...

  4. Python基础 第四章 字典(1)

    通过名称来访问其各个值的数据结构,映射(mapping). 字典,是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.(键,可能是数.字符串.元组). 1.1 字典由 键 及其相 ...

  5. python第四章:函数--小白博客

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  6. 流畅的python第四章文本和字节序列学习记录

    字符问题 把码位转化成字节序列的过程是编码,把字节序列转化成码位的过程是解码 把unicode字符串当成人类可读的文本,码位当成机器可读的, 将字节序列编程人类可读是解码,把字符串编码成字节序列是编码 ...

  7. Python第四章(北理国家精品课 嵩天等)

    一.程序的分支结构 二.身体质量指数BMI #CalBIv1.py height,weight = eval((input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))) ...

  8. 流畅的python第三章字典和集合学习记录

    什么是可散列的数据类型 如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不变的,而且这个对象需要实现__hash__()方法.另外可散列对象还要有__qe__()方法.这样才能跟其他键 ...

  9. Python第四章-流程控制

    流程控制 在以前的代码中,所有的代码都是交由 Python 忠实地从头执行到结束.但是这些远远不够.很多时候需要根据不同的情况执行不同的代码. 如果你想改变这一工作流程,应该怎么做? 就像这样的情况: ...

随机推荐

  1. salesforce零基础学习(一百零一)如何了解你的代码得运行上下文

    本篇参考:https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_enum_System ...

  2. 14. vue源码入口+项目结构分析

    一. vue源码 我们安装好vue以后, 如何了解vue的的代码结构, 从哪里下手呢? 1.1. vue源码入口 vue的入口是package.json 来分别看看是什么含义 dependences: ...

  3. 通达OA 页面敏感信息-2013/2015版本

    参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/4.html 漏洞影响 2013.2015版本 复现过程 POC: http://0-sec.or ...

  4. 利用xslt与xml实现具体字段字母的大小写转换

    定义一个全局的变量 <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" ...

  5. 如何下载Image Properties Context Menu(图片)插件

    如何下载Image Properties Context Menu(图片)插件 可以通过:http://www.cnplugins.com/zhuanti/four-image-processing. ...

  6. Redis 通过 RDB 方式进行数据备份与还原

    Redis 通过 RDB 方式进行数据备份与还原 Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原 Redis 持久化 ...

  7. 一文搞懂如何实现 Go 超时控制

    为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故 Go 超时控制必要 ...

  8. 论Redis分布式锁的正确使用姿势

    前言 日常开发中,秒杀下单.抢红包等等业务场景,都需要用到分布式锁.而Redis非常适合作为分布式锁使用.本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式.如果有不正确的地方,欢迎大家 ...

  9. 运维趋势2019年总结,运维就是要做到"技多不压身"

    2019年 在互联网这个行业中对运维的要求越来越来越高,比如2015.16年的时候,运维只是做一些人力投入的事情,比如重启个服务,搭建一个nginx,mysql主从服务,简单的优化一下,就可以上线了, ...

  10. ubuntu20.04开机显示recovering journal死机的解决方法

    事发突然,在今天开机的时候无法进入登陆界面,一直卡在黑屏界面,屏幕上只显示几行代码,且任何按键都无法起作用 /dev/sdb2:recovering journal /dev/sdb2:Clearin ...