字典是键/值对构成的集合,字典通过大括号来创建,字典的键是字符串,而值可以是任何数据对象。

字典有两个重要的特征:

  • 字典是无序的,字典项没有特定的顺序,只能通过键来获取值;
  • 字典是可变的,支持原处修改键的值;
  • 字典是作为散列表来实现的,可增长,搜索非常快速;
  • 和列表一样,字典存储的是对象的引用,不是拷贝。

创建字典

创建空的字典:

  1. >>> d={}

创建包含两个项目的字典:

  1. >>> d={'name':'vic','age':28}

创建包含嵌套类型的字典:

  1. >>> d={'student':{'name':'vic','age':28}}

通过dict函数来创建字典:

  1. >>> d=dict(name='vic',age=28)
  2. >>> d
  3. {'name': 'vic', 'age': 28}

字典解析

使用字典解析,可以使用迭代器来生成字典:

  1. >>> d={x:x**2 for x in range(0,5)}
  2. >>> d
  3. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

引用字典的值

通过键来引用字典的值

  1. >>> d['name']
  2. 'vic'
  3. >>> d['age']
  4. 28

或者使用dict.get(key, default)来获取键对应的值,其中default参数的作用是:当不存在键时,返回default作为该键的值:

  1. >>> d.get('name')
  2. 'vic'
  3. >>> d.get('nam','jim')
  4. 'jim'

字典操作

字典的基本操作有:

  • len(dict):字典项的数量,或者字典键的数量
  • dict.keys():所有字典键的集合
  • dict.values():所有字典值得集合
  • dict.items():字典项(键/值对)的集合
  • list(dict.keys()):把所有字典键转换为列表
  • list(dict.values()):把所有字典键的值转换为列表
  • d[key],d.get(key):根据字典的键获取值
  • key in dict:检查该key是否是字典的键

1,添加/修改字典项

如果字典中不存在Key,那么添加该Key/Value对;如果存在该Key,那么修改该Key的值。

  1. >>> d=dict(name='vic',age=28)
  2. >>> d['sex']='male'
  3. {'name': 'vic', 'age': 28, 'sex': 'male'}
  4. >>>
  5. >>> d['sex']='man'
  6. {'name': 'vic', 'age': 28, 'sex': 'man'}

2,删除字典项

dict.pop(key) 用于删除键为key的字典项

  1. >>> d.pop('sex')
  2. 'man'
  3. >>> d
  4. {'name': 'vic', 'age': 28}

或者使用 del dict[key]来删除键为key的字典项:

  1. >>> del d['sex']

3,合并字典

dict.update(dict2),把字典dict2合并到dict中

  1. >>> d.update({'tel':'120'})
  2. {'name': 'vic', 'age': 28, 'tel': '120'}

4,复制字典

dict.copy()获得字典的一个深拷贝(deep copy)对象,深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。

dict2=dict:获得字典的一个浅拷贝(shallow copy)对象,浅拷贝只是增加了一个指针指向已经存在的内存。

例如,深拷贝对象和原对象,指向不同的内存空间,修改任意一个字典,不会影响另外一个字典:

  1. >>> d=dict(name='vic',age=28)
  2. >>> dc=d.copy() # deep copy
  3. >>> dc['tel']=120
  4. >>> d
  5. {'name': 'vic', 'age': 28}
  6. >>> dc
  7. {'name': 'vic', 'age': 28, 'tel': 120}

而浅拷贝对象和原对象指向相同的内存空间,修改任意一个字典,另一个字典也会修改:

  1. >>> d=dict(name='vic',age=28)
  2. >>> sc=d # shallow copy
  3. >>> sc['tel']=110
  4. >>> sc
  5. {'name': 'vic', 'age': 28, 'tel': 110}
  6. >>> d
  7. {'name': 'vic', 'age': 28, 'tel': 110}

JSON结构

Python中的json对象实际是一个字典结构,用于存储和交换信息,导入json模块:

  1. import json

1,把字符串转换为json

json的load()方法用于把josn格式的字符串转换为json对象,这实际上是一个字典结构:

  1. json_string= '{ "name":"John", "age":30, "city":"New York"}'
  2. # parse string to json
  3. json_obj = json.loads(json_string)

2,把字典转换为json字符串

json的dumps()函数用于把字典结构转换为json格式的字符串。

  1. x = {
  2. "name": "John",
  3. "age": 30,
  4. "city": "New York"
  5. }
  6. # convert dict into JSON string:
  7. json_string = json.dumps(x)

参考文档:

Python 学习 第16篇:数据类型(字典和Json)的更多相关文章

  1. python学习笔记(18)字典和json 的区别 和转换

    字典和json 的区别 和转换 前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {'a':'1', 'b':'2', 'c':'3' } 再看一下json的写法: ...

  2. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  3. python学习日记(基础数据类型及其方法01)

    数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...

  4. Python 学习 第十篇 CMDB用户权限管理

    Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...

  5. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  6. Python学习笔记进阶篇——总览

    Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...

  7. python的6种基本数据类型--字典

    python的6种基本数据类型--字典   字典 字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号":& ...

  8. python学习第七篇——字典访问键与值

    此程序的目的在于,正确而简单的访问字典的键与值 favorite_languages={ 'jen':['python','c'], 'sarah':['c'], 'edward':['ruby',' ...

  9. Python学习笔记:02数据类型

    Python 数据类型 python中标准的数据类型有 基础类型 整型(长整型) 浮点型 复数型 布尔型 序列类型 字符串 列表 元组 字典 整型 整型和长整型并不严格区分,整型int的表达范围和计算 ...

随机推荐

  1. JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离

     壹 ❀ 引 我在 JQ的offset().top与js的offsetTop区别详解 这篇博客中详细分析了JQ方法offset().top与JS属性offsetTop的区别,并得出了一条offset( ...

  2. ETCD:在容器中运行etcd集群

    原文地址:Docker container 以下指南显示了如何使用静态引导过程在rkt和Docker上运行etcd. rkt 运行单节点的etcd 以下rkt run命令将在端口2379上公开etcd ...

  3. linux远程登入/远程上传文件

    一.远程登入 1.安装 Xshell5 2.查看是否具备连接 在linux 主机上输入 chkconfig --list | grep sshd #sshd 0:关闭 1:关闭 2:启用 3:启用 4 ...

  4. electronr进行签名与公证

    windows: 1.设置package.json的有关window打包的相关内容 "win": { "icon": "build/icons/ico ...

  5. PHPStudyLite启动不成功怎么办

    点击环境端口检测 有端口打开则关闭 一切正常后重新开启

  6. 移动端H5页面遇到的问题总结(转载请注明出处)

    最近刚做完一个移动端的项目,产品之无敌,过程之艰辛,我就不多说了,记录下在这个项目中遇到的问题,以防万一,虽然这些可能都是已经被N多前辈解决掉了的问题,也放在这里,算是为自己漫漫前端路铺了一颗小石子儿 ...

  7. ApiPost——国产postman,中文版,好用

    一款类似postman的接口测试平台,中文版,很好用 参考链接: https://www.cnblogs.com/phpwechat/p/10487077.html ApiPost下载地址: http ...

  8. 【转】java的string中,关于split空串总会返回单个元素的数组

    原地址:http://blog.sina.com.cn/s/blog_6f3da9650102x03c.html public class Split { public static void mai ...

  9. 个人项目-WC(C/C++ 兼容Linux和Windows)

    一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...

  10. [靶场实战]:SQL注入-显错注入

    SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...