[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. [蓝桥杯] Fibonacci数列 入门

    原题链接 import java.util.Scanner;//导入Scanner类 public class Main { public static void main(String[] args ...

  2. 阿里云服务器连接以及centos 搭建 web java环境(linux java部署 tomcat部署)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 最近弄了个试用阿里云服务器倒腾了半天终于部署好,分享一下. 1.登入阿里云打开你申请的是云服务器的实例: 点击重置密码---重置密码后重启服务器才 ...

  3. eval 与 exec, compile区别

    exec 不是表达式: python 2. x, 中的一个语句和 python 3. x. 中的一个函数它编译并立即计算一个字符串中包含的语句或者语句集. 例如: exec('print(5)') # ...

  4. Mysql处理中文乱码的问题

    一开始在创建完毕数据库和数据表之后,插入中文发现在mysql命令行和在sqlyog终端上看都是乱码,查看了一些文章,写的内容都一样,无非是如下几个步骤: 1:修改数据库字符集为utf8 2:修改数据表 ...

  5. 【Java】点击 JButton 修改 Jlabel 的文字和字体颜色

    要求: 点击 JButton 后执行一个方法 m(比较耗时),点击时改变 JLabel 的字体和颜色,方法 m 运行结束后再次修改 JLabel 的字体和颜色. 刚开始点击,都是方法 m 运行结束后, ...

  6. Java连载10-数据类型取值范围&转义字符

    一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...

  7. 内容汇总(c语言)

    一,内容 常量(整型,浮点型,字符型,字符串型,符号常量) 变量(基本类型:整形,浮点型,字符型,枚举型:构造类型:数组,结构体,共用体:另外还有指针类型和NULL) 顺序结构 分支结构 循环结构 当 ...

  8. linux下mysql无法看到3306端口监听

    这个问题搞定了,原因是我的my.cnf有话:skip-network注释掉,然后运行netstat -an|grep 3306 就可以看到了

  9. java在src/test/resourse下读取properties文件

    package com.jiepu; import java.io.File; import java.net.URISyntaxException; import java.util.Map; im ...

  10. jboss6.1安装配置

     Jboss6.1的用途,配置,使用详解 一..简介: JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器因为JBoss代码遵循LGPL许可,你可以在任何商业应用中免费使 ...