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

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. ECMAScript 2016(ES7)新特性简介

    简介 自从ES6(ECMAScript 2015)在2015年发布以来,ECMAScript以每年一个版本的速度持续向前发展.到现在已经是ECMAScript 2020了. 每个版本都有一些新的特性, ...

  2. css3中的渐变效果

    大家好,这里是demo软件园,今天为大家分享的是css3中的渐变效果. css3中的渐变需要注意的是渐变的是图片而不是颜色,而渐变又分为两种:线性渐变与径向渐变,今天我们重点介绍的是线性渐变. 1.线 ...

  3. POJ_1227 Jack Straws 【二维平面判两线段相交】

    一 题面 POJ1127 二 分析 在平面几何中,判断两线段相交的方法一般是使用跨立实验.但是这题考虑了非严格相交,即如何两个线段刚好端点相交则也是相交的,所以还需要使用快速排斥实验. 这里参考并引用 ...

  4. Spring 声明式事务与编程式事务详解

    本文转载自IBM开发者论坛:https://developer.ibm.com/zh/articles/os-cn-spring-trans 根据自己的学习理解有所调整,用于学习备查. 事务管理对于企 ...

  5. P1115_最大子段和(JAVA语言)

    思路:贪心.累加求和,若和小于0则设置和为0,因为和小于0时对这段序列和无正作用,只会使整体变小,所以我们把小于0的段舍弃,从下一个数开始求序列和. 题目描述 给出一段序列,选出其中连续且非空的一段使 ...

  6. 攻防世界 reverse seven

    seven  hctf2018 这是一个驱动文件 ida载入,查找字符串 根据字符串来到函数:sub_1400012F0 __int64 __fastcall sub_1400012F0(__int6 ...

  7. ABP 适用性改造 - 精简 ABP CLI 生成的项目结构

    Overview 不管是公司或者个人都会有不同的开发习惯,通过建立项目模板,既可以使开发人员聚焦于业务功能的开发,也可以在一定程度上统一不同开发人员之间的开发风格.在使用 ABP 框架的过程中,对于 ...

  8. OpenGL 绘制你的 github skyline 模型

    前言 好久没更新博客了,上一篇文章还是在去年6月份,乍一看居然快要过去一年了,不时还能看到粉丝数和排名在涨,可是却一直没有内容更新,怪不好意思的- -(主要是一直没想好要写些什么,中间也有过一些想法, ...

  9. OpenCV 之 图象几何变换

    二维平面中,图像的几何变换有等距.相似.仿射.投影等,如下所示: 1  图象几何变换 1.1  等距变换 等距变换 (Isometric Transformation),是一种二维的刚体变换,可理解为 ...

  10. Genymotion下载模拟器慢

    •问题来源 Genymotion 是个很不错的 Android 模拟器,系统更新快,启动速度快: 但是服务器在国外,Android 镜像下载起来那个速度就不敢恭维了: 当然如果你可以[科学,上网]就另 ...