Python 学习 第16篇:数据类型(字典和Json)
字典是键/值对构成的集合,字典通过大括号来创建,字典的键是字符串,而值可以是任何数据对象。
字典有两个重要的特征:
- 字典是无序的,字典项没有特定的顺序,只能通过键来获取值;
- 字典是可变的,支持原处修改键的值;
- 字典是作为散列表来实现的,可增长,搜索非常快速;
- 和列表一样,字典存储的是对象的引用,不是拷贝。
创建字典
创建空的字典:
>>> d={}
创建包含两个项目的字典:
>>> d={'name':'vic','age':28}
创建包含嵌套类型的字典:
>>> d={'student':{'name':'vic','age':28}}
通过dict函数来创建字典:
>>> d=dict(name='vic',age=28)
>>> d
{'name': 'vic', 'age': 28}
字典解析
使用字典解析,可以使用迭代器来生成字典:
>>> d={x:x**2 for x in range(0,5)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
引用字典的值
通过键来引用字典的值
>>> d['name']
'vic'
>>> d['age']
28
或者使用dict.get(key, default)来获取键对应的值,其中default参数的作用是:当不存在键时,返回default作为该键的值:
>>> d.get('name')
'vic'
>>> d.get('nam','jim')
'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的值。
>>> d=dict(name='vic',age=28)
>>> d['sex']='male'
{'name': 'vic', 'age': 28, 'sex': 'male'}
>>>
>>> d['sex']='man'
{'name': 'vic', 'age': 28, 'sex': 'man'}
2,删除字典项
dict.pop(key) 用于删除键为key的字典项
>>> d.pop('sex')
'man'
>>> d
{'name': 'vic', 'age': 28}
或者使用 del dict[key]来删除键为key的字典项:
>>> del d['sex']
3,合并字典
dict.update(dict2),把字典dict2合并到dict中
>>> d.update({'tel':'120'})
{'name': 'vic', 'age': 28, 'tel': '120'}
4,复制字典
dict.copy()获得字典的一个深拷贝(deep copy)对象,深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。
dict2=dict:获得字典的一个浅拷贝(shallow copy)对象,浅拷贝只是增加了一个指针指向已经存在的内存。
例如,深拷贝对象和原对象,指向不同的内存空间,修改任意一个字典,不会影响另外一个字典:
>>> d=dict(name='vic',age=28)
>>> dc=d.copy() # deep copy
>>> dc['tel']=120
>>> d
{'name': 'vic', 'age': 28}
>>> dc
{'name': 'vic', 'age': 28, 'tel': 120}
而浅拷贝对象和原对象指向相同的内存空间,修改任意一个字典,另一个字典也会修改:
>>> d=dict(name='vic',age=28)
>>> sc=d # shallow copy
>>> sc['tel']=110
>>> sc
{'name': 'vic', 'age': 28, 'tel': 110}
>>> d
{'name': 'vic', 'age': 28, 'tel': 110}
JSON结构
Python中的json对象实际是一个字典结构,用于存储和交换信息,导入json模块:
import json
1,把字符串转换为json
json的load()方法用于把josn格式的字符串转换为json对象,这实际上是一个字典结构:
json_string= '{ "name":"John", "age":30, "city":"New York"}'
# parse string to json
json_obj = json.loads(json_string)
2,把字典转换为json字符串
json的dumps()函数用于把字典结构转换为json格式的字符串。
x = {
"name": "John",
"age": 30,
"city": "New York"
}
# convert dict into JSON string:
json_string = json.dumps(x)
参考文档:
Python 学习 第16篇:数据类型(字典和Json)的更多相关文章
- python学习笔记(18)字典和json 的区别 和转换
字典和json 的区别 和转换 前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {'a':'1', 'b':'2', 'c':'3' } 再看一下json的写法: ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- python学习日记(基础数据类型及其方法01)
数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...
- Python 学习 第十篇 CMDB用户权限管理
Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- python的6种基本数据类型--字典
python的6种基本数据类型--字典 字典 字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号":& ...
- python学习第七篇——字典访问键与值
此程序的目的在于,正确而简单的访问字典的键与值 favorite_languages={ 'jen':['python','c'], 'sarah':['c'], 'edward':['ruby',' ...
- Python学习笔记:02数据类型
Python 数据类型 python中标准的数据类型有 基础类型 整型(长整型) 浮点型 复数型 布尔型 序列类型 字符串 列表 元组 字典 整型 整型和长整型并不严格区分,整型int的表达范围和计算 ...
随机推荐
- CSS置换元素和非置换元素
置换元素: 1. 一个内容 不受CSS视觉格式化模型控制,CSS渲染模型并不考虑对此内容的渲染,且元素本身一般拥有固有尺寸(宽度,高度,宽高比)的元素,被称之为置换元素. 2. 置换元素就是浏览器根 ...
- 【SDOI 2015】约数个数和
Problem Description 设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(N\).\(M\),求 \[ \sum_{i=1}^N \sum_{j=1}^M d(ij) \] ...
- Mybatis的原理分析1(@Mapper是如何生效的)
接着我们上次说的SpringBoot自动加载原理.我们大概明白了在maven中引入mybatis后,这个模块是如下加载的. 可能会有人问了,一般我们的dao层都是通过Mapper接口+Mapper.x ...
- (四十三)c#Winform自定义控件-Listview-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- MySql-8.0.16-winx64 安装
参考文章: https://www.cnblogs.com/lxlin/p/9635350.html https://www.cnblogs.com/xc1234/p/9050149.html MyS ...
- Add a Simple Action using an Attribute 使用特性添加简单按钮
In the previous Add a Simple Action lesson, you learned how to add an Action by implementing the Vie ...
- 【Android】Android多渠道打包--Gradle打包
Android多渠道打包--Gradle打包 前言 由于App一般都会在多个应用市场上架,为了分析App在每个不同渠道的具体的数据,一般都会对不同渠道打包不同的App.多渠道打包有多种方式,这里只介绍 ...
- MySQL基础之数据管理【4】
外键约束的使用(只有InnoDB存储引擎支持外键) create table news_cate( id tinyint unsigned auto_increment key comment '编号 ...
- MongoDB的模糊查询操作(类关系型数据库的 like 和 not like)
1.作用与语法描述 作用: 正则表达式是使用指定字符串来描述.匹配一系列符合某个句法规则的字符串.许多程序设计语言都支持利用正则表达式进行字符串操作.MongoDB 使用 $regex 操作符来设置匹 ...
- 非法指令(Illegal Instruction)问题定位
关键词:Illegal Instruction.SIGILL等. 进程在运行过程中会收到SIGILL信号,此类错误是由操作系统发送给进程的. SIGILL是某个进程中的某一句不能被CPU识别指令,这些 ...