#   字典概念:无序的, 可变的键值对集合
# 定义 # 方式1
# {key: value, key: value...}
# 例如
# {"name": "xin", "age": 18} d = {"name": "xin", "age": 18}
print(d, type(d)) #{'name': 'xin', 'age': 18} <class 'dict'>
print(d["name"]) # xin # 方式2
# fromkeys(S, v=None)
# 静态方法
# 类和对象都可以调用
# 类调用
# dict.fromkeys("abc", 666)
# {'a': 666, 'c': 666, 'b': 666}
# 此处的dict, 是指字典类型
# 对象调用
# dic.fromkeys("abc", 666)
# {'a': 666, 'c': 666, 'b': 666}
# 此处的dic, 是实例化的字典对象
d = dict.fromkeys("abc",888)
d1 = dict.fromkeys([1,2,3], 888)
print(d) #{'a': 888, 'b': 888, 'c': 888}
print(d1) #{1: 888, 2: 888, 3: 888} # 注意
# key不能重复
# 如果重复
# 后值会把前值覆盖
# key必须是任意不可变类型
# 例如
# 可变
# 列表
# 字典
# 可变集合
# ...
# 不可变
# 数值
# 布尔
# 字符串
# 元组
# ...
# 原因
# Python的字典, 采用哈希(hash)的方式实现
# 简单存储过程
# 初始化一个表格, 用来存放所有的值
# 这个表格称之为"哈希表"
# 暂且可理解为我们所学的 "列表"
# 在存储一个键值对的时候, 会作如下操作
# 根据给定的key, 通过某些操作, 得到一个在"哈希表"中的索引位置
# 把key通过 "哈希函数" 转换成一个整型数字
# 称为 "哈希值"
# 将该数字对数组长度进行取余,取余结果就当作数组的下标
# 如果产生了"哈希冲突"
# 比如, 两个不同的key, 计算出来的索引, 是同一个
# 则采用"开发寻址法"
# 通过探测函数查找下一个空位
# 根据索引位置, 存储给定的"值"
# 简单查找过程
# 再次使用哈希函数将key转换为对应的列表的索引,并定位到列表的位置获取value #怎么知道是可变和不可变的值,可以通过id来观察地址
num = 10
print(id(num))
num = 20
print(id(num)) #和上面的结果地址是不同的,代表赋值后又重新生成一个地址空间,原来地址的值不变,所以就代表不可变类型 #下面是个可变类型
nums = [1, 2, 3]
print(id(nums))
nums.append(4)
print(id(nums)) #和上面的结果地址相同,代表可变类型 # 存在意义
# 可以通过key, 访问对应的值, 使得这种访问更具意义
# person["name"]
# 表述的是获取一个人的姓名
# 查询效率得到很大提升
# 可想象"汉字字典"的使用方式
# 直接根据指定的key找到对应的页码, 从而找到这个汉字
# 不需要一页一页的翻着找 # -----------------------------------------------------常用操作------------------------------#
# 增
# dic[key] = value
# 当key在原字典中不存在时, 即为新增操作 # 删
# del dic[key]
# key, 必须要存在
# dic.pop(key[, default])
# 删除指定的键值对, 并返回对应的值
# 如果key, 不存在, 那么直接返回给定的default值;
# 不作删除动作
# 如果没有给定默认值, 则报错 # dic.popitem()
# 删除按升序排序后的第一个键值对, 并以元组的形式返回该键值对
# 如果字典为空, 则报错
# # dic.clear()
# 删除字典内所有键值对
# 返回None
# 注意, 字典对象本身还存在, 只不过内容被清空
# 注意和del的区别
# 改
# 只能改值, 不能改key
# 修改单个键值对 # dic[key] = value
# 直接设置, 如果key不存在, 则新增, 存在则修改
# 批量修改键值对 # oldDic.update(newDic)
# 根据新的字典, 批量更新旧字典中的键值对
# 如果旧字典没有对应的key, 则新增键值对
oldDict = {"name": "xin", "age": 18}
newDict = {"age": 28, "address": "china"}
oldDict.update(newDict)
print(oldDict) #{'name': 'xin', 'age': 28, 'address': 'china'} # 查
# 获取单个值
# 方式1
# dic[key]
# 如果key, 不存在, 会报错 #
# 方式2
# dic.get(key[, default])
# 如果不存在对应的key, 则取给定的默认值default
# 如果没有默认值, 则为None
# 但不会报错
# 但是, 原字典不会新增这个键值对 # 方式3
# dic.setdefault(key[, default])
# 获取指定key对应的值
# 如果key不存在, 则设置给定默认值, 并返回该值
# 如果默认值没给定
# 则使用None代替 # 获取所有的值
# dic.values()
d = {"name": "xin", "age": 18}
print(d.values()) #dict_values(['xin', 18]) # 获取所有的键
# dic.keys()
print(d.keys()) #dict_keys(['name', 'age']) # 获取字典的键值对
# dic.items()
# 遍历
# for in
# for x, y in info.items()
# 注意
# Python2.x和Python3.x版本之间关于获取键, 获取值, 获取item, 之间的区别
# Python2.x
# 直接是一个列表
# 可通过下标进行获取指定元素
# Python3.x
# 中是Dictionary
# view
# objects
# 优势
# 当字典发生改变时, view
# objects会跟着发生改变
# 转换成列表使用
# list(result)
# 转换成迭代器
# iter(result)
# 也可以直接被遍历
# 在Python2.x中提供了如下方法
# viewkeys()
# viewvalues()
# viewitems()
# 作用如同Python3.x中的
# Dictionary
# view
# objects
# 计算
# len(info)
# 键值对的个数
# 判定
# x in dic
# 判定dic中的key, 是否存在x
# x not in dic
# 判定dic中的key, 是否不存在x
# dic.has_key(key)
# 已过期, 建议使用in来代替

Python 字典Dict概念和操作的更多相关文章

  1. python字典dict的增、删、改、查操作

    ## python字典dict的增.删.改.查操作dict = {'age': 18, 'name': 'jin', 'sex': 'male', }#增# dict['heigh'] = 185 # ...

  2. python 字典dict - python基础入门(15)

    前面的课程讲解了字符串str/列表list/元组tuple,还有最后一种比较重要的数据类型也需要介绍介绍,那就是python字典,俗称:dict. python中的字典可与字符串/列表/元组不同,因为 ...

  3. Python 字典 dict() 函数

    描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...

  4. 'dict_values' object does not support indexing, Python字典dict中由value查key

    Python字典dict中由value查key 众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂.但是dict需要占用较大的内存空间,换句 ...

  5. python 字典 dict 该注意的一些操作

    在用python处理dict 的时候,有几个该注意的地方,这里跟大家提一下: 1)操作dict 时,尽量少产生新的列表对象.比如: 遍历dict的时候,如果用 dic = {"a" ...

  6. Python字典(dict)使用技巧

    字典dict是Python中使用频率非常高的数据结构,关于它的使用,也有许多的小技巧,掌握这些小技巧会让你高效地的使用dict,也会让你的代码更简洁. 1.默认值 假设name_for_userid存 ...

  7. Python — 字典dict 和 集合set

    字典dict : dict和set的key都是不可变对象 对于不变对象来说,调用对象自身的任意方法,也不会改变对象自身的内容.相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可 ...

  8. python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序 ...

  9. python 字典dict和列表list的读取速度问题, range合并

    python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候,需要读取较大数据(2.7G)存入字典中,然后对被处理数据进行字典key值的匹配,在被处理文件中每次读取一行进行处理后查找是否在字 ...

随机推荐

  1. 2015年天勤考研机试模拟赛 A 推断三角形

    [思路]:採用atoi转换长度.两边仅仅和大于第三边,两边之差小于第三边. [AC代码]: #include <iostream> #include <algorithm> # ...

  2. python学习【第十一篇】网络编程

    一.socket的简介 socket(简称:套接字)进程间通信的一种方式,它与其他进程间通信的一个主要不同是:能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通 ...

  3. 【BZOJ1823】[JSOI2010]满汉全席 2-SAT

    [BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只 ...

  4. JAVA性能调试+JProfiler使用相关

    一.JProfiler下载.安装与激活 1.1 下载 直接官网下载(https://www.ej-technologies.com/download/jprofiler/files) 建议下载9.X系 ...

  5. 关于在react和node中,经常出现的const

    const是定义一个常量,在ECM6当中,定义局部变量可以用let.定义全局变量用var......这是ECM6的新特性,好吧,包子在这里只是记录一下,希望大家在将来写react或者node的时候,不 ...

  6. Oracle 逻辑体系

    Oracle 逻辑体系 主题 Oracle 逻辑体系 参考资料   Oracle 逻辑体系   表空间.模式.用户.段.区.块 Oracle中的数据逻辑上存储于表空间,物理上则存储于属于表空间tabl ...

  7. SpringBoot整合Dubbo报错: java.lang.ClassCastException

    com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote proxy method queryGoodsLimitPage to regi ...

  8. ECMAScript6面对大于0xFFFF的Unicode字符如何正确返回长度

    一.match() 1.定义 match()方法用于检索字符串内指定(字符串或正则)的值,返回指定值的数组,若找不到,返回null. 2.语法 str.match(searchvalue) str.m ...

  9. jquery生成二维码图片

    1.插件介绍 jquery.qrcode.min.js插件是jq系列的基于jq,在引入该插件之前要先引入jq.能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生 ...

  10. Android的代码都得自己一个个敲一遍吗?

          近期在Android学习中,碰到一个头疼的问题.众所周知Android是一个开发源码的平台,网上有非常多网友分享的关于各种样例的demo,比方扫描二维码,瀑布流等,对于前人已有的成果,我们 ...