热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python9:字典

map是python中的映射类型,是可变对象,用于将一个值映射到另一个值。map中的值没有特殊的顺序,都是与一个key对应,key可以是数字、字符串或者元组(即不可变类型)。需
map是python中的映射类型,是可变对象,用于将一个值映射到另一个值。map中的值没有特殊的顺序,都是与一个key对应,key可以是数字、字符串或者元组(即不可变类型)。

需要注意当key为数字时,使用一下的原则:如果两个数字的值相等(例如1和1.0),则他们用于key时对应同样的条目(但是需要注意,由于计算机存储浮点型为一个近似值,所以使用浮点型作为key不是一个明智的选择)。

构造字典

可以通过下面的方式构造字典:

>>> {4098: 'jack', 4127: 'sjoerd'}
{4098: 'jack', 4127: 'sjoerd'}
>>> {'jack': 4098, 'sjoerd': 4127}
{'jack': 4098, 'sjoerd': 4127}
>>> {'Alice':'2341','Beth':'9102','Cecil':'3258'}
{'Beth': '9102', 'Cecil': '3258', 'Alice': '2341'}
key和值之间通过冒号分隔,项之间用逗号分隔。也可以使用 dict构造器:

class dict(**kwarg) 
class dict(mapping, **kwarg) 
class dict(iterable, **kwarg) 
字典的创建规则如下:

1)如果参数为空,则一个空字典被创建;

>>> dict()
{}
2)如果传入一个字典对象,一个具有同样的key-value对的字典被创建;

>>> phOnebook= {'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>> dict(phonebook)
{'Beth': '9102', 'Cecil': '3258', 'Alice': '2341'}
3)如果传入的是iterable对象,则要求该对象的每个元素都应该是一个具有两个值的iterable对象,每个对象的第一个值将作为key,第二个值则作为value;如果一个key出现多次,则最后出现的key对应的值将成为该key的值;

>>> dict([(1,123),(2,234),(3,345)])
{1: 123, 2: 234, 3: 345}
>>> dict([(1,123),(2,234),(3,345),(2,890)])
{1: 123, 2: 890, 3: 345}
4)如果kwarg值被给,则kwarg将被添加到前3步创建的字典中;如果kwarg中的key在字典中已经存在,该key的值将替换字典中同样key的值。

>>> dict([('zero','w'),('two','four'),('3','t')], One=1, two=2, three=3)
{'three': 3, 'one': 1, '3': 't', 'two': 2, 'zero': 'w'}
下面使用dict创建一个相同的字典{"one": 1, "two": 2, "three": 3}:

>>> a = dict(One=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True

字典的基本操作

下面是字典中支持的基本操作。

len(d)

返回字典元素个数。

d[key]

返回key对应的value,如果key不在map中,则抛出KeyError异常。
可以在字典的子类中定义__missing__()方法,如果key不存在,则d[key]操作将调用该方法,将key作为参数,看下面的例子:

>>> class Counter(dict):
	def __missing__(self, key):
		return 0
>>> c = Counter()
>>> c['red']
0
>>> c['red'] += 1
>>> c['red']
1
>>> c['green']
0

d[key] = value

设置key的值到value。

del d[key]

移除d[key],如果key不在字典中,则抛出KeyError。

key in d

如果d存在key key,则返回True,否则返回False。

key not in d

相当于not key in d。

iter(d)

返回d的keys的迭代器,相当于iter(d.keys())。

clear()

移除字典中的所有条目。

copy()

返回字典的一个浅拷贝。

classmethod fromkeys(seq[, value])

创建一个新的字典,key来自seq,value来自value。如果不传入value,则默认value为None。

get(key[, default])

返回key对应的value,如果key不存在,则返回default,如果default未提供,则返回None。

pop(key[, default])

如果key在字典中,则移除key,并返回key对应的值,否则返回default。如果default未提供,并且key不在字典中,则抛出KeyError。

popitem()

移除并返回字典中任意一对(key, value)。如果字典为空,则抛出KeyError。

setdefault(key[, default])

如果key在字典中,则返回它的值;否则,插入一个key,使用值default,并返回default。default默认为None。

update([other])

使用other来更新字典,覆盖已经存在的key。other可以是另一个字典或者带key/value对的迭代器。

items()

返回一个字典的条目的视图((key,value)对)。

keys()

返回字典的key的视图。

values()

返回字典的value的视图。

关于items()、keys()和values()返回的视图可以有如下操作。

字典视图的操作

items()、keys()和values()返回一个动态视图,能够反映出字典的变化,视图支持迭代,并支持下面的方法:

len(dictview)

返回视图的长度。

iter(dictview)

返回视图的迭代器,迭代的顺序是任意的,依赖字典数据操作的历史。
注意迭代视图期间,字典执行添加或删除操作将导致RuntimeError或者不能迭代整个数据。

x in dictview

如果x在视图中,则返回True。

使用字典格式化字符串

Python支持使用字典的(key,value)对来格式化字符串,看下面的例子:

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> "I has %(eggs) eggs." % dishes
'I has  2.000000e+00ggs.'
这个方法在模板文件中非常常用。

python9:字典


推荐阅读
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • SvpplyTable: 实现可扩展和可折叠的菜单动画
    SvpplyTable 是一个示例项目,旨在实现类似 Svpply 应用程序中的可扩展和可折叠的菜单动画效果。该项目托管在 GitHub 上,地址为 https://github.com/liuminqian/SvpplyTable。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 本文介绍了一种使用CSS3和jQuery实现的35款SVG图标加载动画。这些动画不仅视觉效果出色,还能提升用户体验。通过本文,您可以了解如何在项目中应用这些动画。 ... [详细]
  • 本文介绍了如何在 Qt 应用程序中实现状态栏、浮动窗口(铆接部件)和中心部件。通过简单的代码示例,详细解释了每个组件的创建和设置方法。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 本文介绍了 Confluence 6 中使用的其他 Cookie,这些 Cookie 主要用于存储产品的基本持久性和用户偏好设置,以提升用户体验。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
author-avatar
百花一枝梅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有