当前位置:首页>编程日记>正文

Python第四章-字典

第四章 字典-当索引不好用时
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])      
    }

 

http://www.coolblog.cn/news/c3d56c6317aca203.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐