[TOC]

字典——dict { }

字典是无序,可变的数据类型。

字典:用于存储数据,存储大量数据,字典要比列表快;将数据和数据之间进行关联。

1. 定义:

 dic = {键:值,键:值}  #每个 键值对 以逗号分隔成一个元素

字典的值: 可以是任意的数据类型。

字典的键:必须是可哈希的——不可改变的数据类型;要求键唯一,如果有重复的,则后面的值会把前面的值覆盖掉。

(注:可哈希的 -- 不可变的数据类型(数字、字符串、布尔值) -- 避免哈希冲突使用了 “开放寻址法” )

(不可哈希的 -- 可变的数据类型 (列表、字典) )

2. 增:

 dic = {"a":10,"b":20,"c":30}
 ​
 dic["键"] = 值  # 暴力添加
 dic["d"] = 40
 ​
 dic.setdefault(键,值)  # 通过键去字典中查询,如果键不存在执行添加,如果键存在则不会添加
 dic.setdefault("c",40)    # "c" 存在,不添加
 dic.setdefault("f",40)    # "f"不存在,添加到字典

3. 删:

 del dic["a"]    # 通过字典的键,删除键值对
 dic.pop("b")    # 通过字典的键,删除键值对,有返回值,返回的是被删除的值
 dic.clear()     # 清空字典

4. 改:

 dic["b"] = 200   #字典中没有此键值对的时候就是添加,当键在字典中存在的时候就是修改    # "有则改,无则加"
 dic.update(dic1) # 更新,里面必须放字典。update括号中的字典(dic1)级别高于前面的字典(dic)
                  # 运行:先将具有相同键的内容覆盖,再在字典末尾添加dic没有的键值对

5. 查:

 for i in dic:
     print(i)     # for 循环获取的是键值对的键
 ​
 dic.get(键)    # 通过键获取值,如果键不存在字典中会返回 None
 dic[键]        # 通过键获取值,如果键不存在字典中会报错!

6. 其他操作:

 dic = {"a":1,"b":2,"c":3}
 ​
 # 1.
 for i in dic:
     print(i,dic.get(i))   # 循环输出所有的键和值 a 1   b 2   c 3
 ​
 # 2. keys() 所有的键
 print(dic.keys())  # 高仿列表,获取的是字典中所有的键   -- dict_keys(['a', 'b', 'c']) 支持for循环 不支持索引
 ​
 for i in dic.keys():
     print(i)        # 循环输出所有的键 a b c
     
 print(dic.keys()[0]) # 报错 'dict_keys' object does not support indexing(不支持索引)
 ​
 # 3. values() 所有的值
 print(dic.values())  # 高仿列表,获取的是字典中所有的值 ——dict_values([1, 2, 3])
 print(list(dic.values()))   # 获取的是字典中所有的值,转换成 真的列表
 ​
 # 4. items() 所有的键和值
 print(dic.items())  # 高仿列表,获取的是字典中所有的键和值,存放在元组中 ——dict_items([('a', 1), ('b', 2), ('c', 3)])
 ​
 for i in dic.items():
     print(i[0],i[1])  #将键和值从元组中循环打印出 a 1   b 2   c 3
 ​
 # 5. 将字典中的值放到列表中
 lst = []
 for i in dic:
     lst.append(dic[i])
 print(lst)

7. 解构:

 a = 10
 b = 20
 a,b = b,a
 print(a,b)   # 实现a,b数字的交换,列表、元组都可以
 ​
 a,_,b = (3,4,5)
 print(a,b)   # 3 5 等号后边的值和前面的变量名要一一对应(假如只要a,b)
 ​
 a = 10,12  # 本质就是一个元组
 print(a)   # (10,12)
 ​
 a,b = "23"
 print(a,b)   # 2 3
 ​
 a,b = {"1":"a","2":"b"}
 print(a,b)    #输出 1 2(键)
 ​
 for i in dic.items():
     print(i)    # 获取的是每个元素,结果:(键,值)
     
 for k,v in dic.items():
     print(k,v)    # 获取每个元素的键和值

8. 字典的嵌套:

查找的时候一次一次的通过键查找。

dic[键]

 dic = {1001:["周杰伦","林俊杰"],
        1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}}}
 print(dic[1002]["汪峰"]["前妻2"][1])   # 熊二

python 05 字典的更多相关文章

  1. python 05—字典

    一.字典的键是唯一的 键:简单对象,例[字符串.整数.浮点数.bool值] list不能作为键,但可以作为值. 例: score = { '萧峰' : 95, '段誉' : 97, '虚竹' : 89 ...

  2. python --- 05 字典 集合

    一.字典 可变数据类型 {key:value}形式   查找效率高   key值必须是不可变的数据类型 1.增删改查 1).增    dic["新key"] = "新va ...

  3. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  4. Python的字典

    1.  Python的字典 1.1.  字典的定义 在Python中,字典是一种key-value的数据类型,也是唯一的映射类型:字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器 ...

  5. Python的字典和JSON

    Python的字典和JSON在表现形式上非常相似 #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'] ...

  6. python基础--字典

    Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...

  7. Python dictionary 字典 常用法

    Python dictionary 字典 常用法 d = {} d.has_key(key_in)       # if has the key of key_in d.keys()          ...

  8. python有序字典OrderedDict()

    转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...

  9. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

随机推荐

  1. JavaScript数组高性能去重解决方案

    在大多数的人眼里,数组去重是一个很简单的课题,很多人甚至熟练掌握了多种数组去重的方法,然而大多时候,我们却忽略了数组去重所消耗的时间资源.譬如我们在做前端性能优化的时候,又有多少人会考虑JavaScr ...

  2. cesium 学习(六) 坐标转换

    cesium 学习(六) 坐标转换 一.前言 在场景中,不管是二维还好还是三维也罢,只要涉及到空间概念都会提到坐标,坐标是让我们理解位置的一个非常有效的东西.有了坐标,我们能很快的确定位置相关关系,但 ...

  3. 【Java中级】(三)IO

    1. 流分为字节流和字符流 2. 字节流下面常用的又有数据流和对象流 3. 字符流下面常用的又有缓存流 文件对象 文件和文件夹都用File表示 //file path : 文件的绝对路径或相对路径Fi ...

  4. 如何在 Centos7 中安装 gcc

    系统环境:Centos7.4 今天在安装 Nodejs8.7 的时候,报了一个警告: WARNING: C++ Compiler too old, need g++ 4.9.4 or clang++ ...

  5. kubernetes 1.15.1 高可用部署 -- 从零开始

    这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...

  6. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这

    优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...

  7. 搭建PowerDNS+LAP+NFS+MySQL主从半节点同步实现LAMP架构

    实验环境:(共7台机器) PowerDNS: 192.168.99.110    两台LAP: 192.168.99.120 和 192.168.99.130 NFS服务器:192.168.99.14 ...

  8. Docker 容器基本操作[Docker 系列-2]

    ​Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正 ...

  9. Spring框架使用@Autowired自动装配引发的讨论

    问题描述 有同事在开发新功能测试时,报了个错,大致就是,在使用 @Autowired 注入时,某个类有两个bean,一个叫a,一个叫b. 一般这种情况应该声明注入哪个bean,他没有声明,他不知道这个 ...

  10. Java 求字符串中出现频率最高字符

    前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import ja ...