字典dict

字典是由大括号{键:值}组成,字典是无序的,字典的键必须是不可变的数据类型,不能使用列表,集合等可变类型作为键。如下:

dict_1 = {'a':1}          # 使用str为键,正确
dict_2 = {1:2} # 使用int为键,正确
dict_3 = {True:3} # 使用bool为键,正确
dict_4 = {('a',1):'a'} # 使用元组为键,正确
dict_5 = {[1,2]:'b'} # 使用list为键,错误
dict_6 = {{'a','b'}:12} # 使用set为键,错误
dict_7 = {{'a':1}:5} # 使用字典为键,错误

字典dict常用方法

setdefault(k[,d]):如果只给出键不给值,将打印键对应的值,如果没有找到键返回Note。如果给了键和值,如果键已存在,则什么都不做,如果没有找到键,则将键和值添加到字典中,如下示例:

dict_1 = {'a':1,'b':2}
# 添加一组键值对
dict_1.setdefault('c',3)
print(f'添加后的字典:{dict_1}') # 添加键如果不指定值,默认是None
dict_1.setdefault('d')
print(f'添加后的字典:{dict_1}') print('-'*40) # 如果键不存在将返回None
print(f'字典中b的值是:{dict_1.setdefault("b")}')
print(f'字典中z的值是:{dict_1.setdefault("z")}') # 打印内容如下
添加后的字典:{'a': 1, 'b': 2, 'c': 3}
添加后的字典:{'a': 1, 'b': 2, 'c': 3, 'd': None}
----------------------------------------
字典中b的值是:2
字典中z的值是:None

fromkeys(iterable, value=None, /):给键添加一样的值,但需要注意,如果值是可变类型如列表,那么所有键将都指向这个列表,所以所有键的值都是一样的。

参数:

iterable:是一个可迭代对象,作为键。

value:键的值,默认是None。

示例:

dict_1 = {}
dict_1 = dict.fromkeys(['b','c','d'],100)
print(f'添加后的字典的键和值是:{dict_1}') print('-'*40) # 当键是一个可变的数据类型列表时
dict_1 = dict.fromkeys(['b','c','d'],[1,2])
print(f'添加后的字典的键和值是:{dict_1}') dict_1['b'].append(10)
print(f'键b添加元素10后字典其它键和值是:{dict_1}')
# 打印内容如下
添加后的字典的键和值是:{'b': 100, 'c': 100, 'd': 100}
----------------------------------------
添加后的字典的键和值是:{'b': [1, 2], 'c': [1, 2], 'd': [1, 2]}
键b添加元素10后字典其它键和值是:{'b': [1, 2, 10], 'c': [1, 2, 10], 'd': [1, 2, 10]}

pop(k[,d]):删除字典中的键值对,返回删除键对应的值。

参数:

k:要删除的键。

d:当键不存在的提示信息。

示例:

dict_1 = {'a':1,'b':2,'c':3,'d':4}
buf = dict_1.pop('a')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}') print('-'*40) # 删除不存在的键 1
buf = dict_1.pop('z','字典中没有找到键z')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}') print('-'*40) # 删除不存在的键 2,如果只给定pop只给定键不给提示信息则会报错
buf = dict_1.pop('z')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}')
# 打印内容如下
删除键a后的字典是:{'b': 2, 'c': 3, 'd': 4}
删除的值是:1
----------------------------------------
删除键a后的字典是:{'b': 2, 'c': 3, 'd': 4}
删除的值是:字典中没有找到键z
----------------------------------------
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 12, in <module>
buf = dict_1.pop('z')
KeyError: 'z'

pop(键,提示语句)是有返回值的,可以返回被删除的键的值。

popitem():以元组的形式返回被删除的键值对,Python3.6以上版本删除最后一项键值对,其它版本是随机删除一组键值对。

dict_1 = {'a':1,'b':2,'c':3,'d':4}
buf = dict_1.popitem()
print(f'删除后的字典是:{dict_1}')
print(f'删除的值是:{buf}')
# 打印内容如下
删除后的字典是:{'a': 1, 'b': 2, 'c': 3}
删除的值是:('d', 4) 

keys():打印字典所有的键。

dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典所有的键:{dict_1.keys()}')
print(f'字典所有的键(列表的形式):{list(dict_1.keys())}')
# 打印内容如下
字典所有的键:dict_keys(['a', 'b', 'c', 'd'])
字典所有的键(列表的形式):['a', 'b', 'c', 'd']

values():打印字典所有的值。

dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典所有的值:{dict_1.values()}')
print(f'字典所有的值(列表的形式):{list(dict_1.values())}')
# 打印内容如下
字典所有的值:dict_values([1, 2, 3, 4])
字典所有的值(列表的形式):[1, 2, 3, 4]

items():打印字典所有的键值对。

dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典的键和值:{dict_1.items()}')
print(f'字典的键和值(列表的形式):{list(dict_1.items())}')
# 打印内如如下
字典的键和值:dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
字典的键和值(列表的形式):[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

get(k[,d]):获取字典键的值。

参数:

k:字典的键。

d:提示信息。

示例:

dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典键a的值:{dict_1.get("a")}')
print(f'字典键z的值:{dict_1.get("z")}')
print(f'字典键z的值:{dict_1.get("z","没有找到z")}')
# 打印内容如下
字典键a的值:1
字典键z的值:None
字典键z的值:没有找到z

copy():字典的浅拷贝。

dict_1 = {'a':1,'b':2,'c':[1,2,3]}
temp = dict_1.copy()
dict_1['a'] = 10
print(f'更改dict_1键a的值后dict_1:{dict_1}')
print(f'更改dict_1键a的值后temp:{temp}') print('-'*40) dict_1['c'][0] = 10
print(f'更改dict_1键c的值后dict_1:{dict_1}')
print(f'更改dict_1键c的值后temp:{temp}') # 打印内容如下
更改dict_1键a的值后dict_1:{'a': 10, 'b': 2, 'c': [1, 2, 3]}
更改dict_1键a的值后temp:{'a': 1, 'b': 2, 'c': [1, 2, 3]}
----------------------------------------
更改dict_1键c的值后dict_1:{'a': 10, 'b': 2, 'c': [10, 2, 3]}
更改dict_1键c的值后temp:{'a': 1, 'b': 2, 'c': [10, 2, 3]}

update(dic):参数是一个字典,将dic更新到源字典中,如果dic的键在源字典中已存在,则更新源字典的键对应的值。

dict_1 = {'a':1,'b':2,'c':3}
# 向字典中添加{'d':4,'e':5}
dict_1.update({'d':4,'e':5})
print(f'更新后的字典是:{dict_1}') # 更新字典键a,b的值
dict_1.update({'a':10,'b':20})
print(f'更新后的字典是:{dict_1}') # 打印内容如下
更新后的字典是:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
更新后的字典是:{'a': 10, 'b': 20, 'c': 3, 'd': 4, 'e': 5}

clear():清空字典。

dict_1 = {'a':1,'b':2,'c':3}
dict_1.clear()
print(dict_1)
# 打印内容如下
{}

解构

# 如果=号两边变量的数量和值的数量相等,那么变量的数据类型和值的数据类型相同
a,b,c = 1,2,3
print(a,b,c)
# 如果用一个变量接收用逗号","分隔的多个值时,变量最终的数据类型是tuple元组
d = 1,2,3
print(d)
# 打印内容如下
1 2 3
(1, 2, 3)

 总结:如果=号两边变量的数量和值的数量相等,那么变量的数据类型和值的数据类型相同,如果用一个变量接收用逗号","分隔的多个值时,变量最终的数据类型是tuple元组。

通过解构的方式打印字典的键和值。

dict_ = {"电视剧":"水浒传","电影":"黄飞鸿"}
for key_,val_ in dict_.items(): # 通过结构的方式打印键和值
print(key_,val_)
# 打印内容如下
电视剧 水浒传
电影 黄飞鸿

set集合

集合是无序的因此不能循环获取,集合的特性是没有重复数据。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典的,还有set集合的值必须是不可变的如:整型、字符串、元祖不能是列表,字典等可被修改的数据。如下操作:

set_1 = {1,2,3}            # 正确
set_2 = set() # 定义一个空列表
set_3 = {"a","b","c"} # 正确
set_4 = {True,False} # 正确
set_5 = {1,2,"a",(1,2,3)} # 正确
set_6 = {1,2,"a",[1,2,3]} # 错误的赋值方式,list是可变的
print(set_3) # 打印内容如下:
TypeError: unhashable type: 'list'
set_7 = {1,2,"a",{"字典":"值"}} # 错误的赋值方式,dict是可变的
print(set_7) # 打印内容如下:
TypeError: unhashable type: 'dict'
set_8 = {1,2,"a",{5,7,9}} # 错误的赋值方式,set是可变的
print(set_3) # 打印内容如下:
TypeError: unhashable type: 'set'

set集合中常用的方法:

add():向集合中添加数据,参数必须是不可改变的,参数类型参考set的赋值。

set_1 = {1,2,3}
set_1.add(4)
print(set_1) # 打印内容如下
{1, 2, 3, 4}

update(可迭代对象):向集合中添加可迭代数据。

set_1 = {1,2,3}
set_1.update('abc')
print(set_1)
set_1.update([4,5,6])
print(set_1)
# 打印内容如下
{1, 2, 3, 'c', 'b', 'a'}
{1, 2, 3, 4, 5, 'c', 6, 'b', 'a'}

del 删除集合。

set_1 = {1,2,3}
del set_1
print(set_1)
# 打印内容如下
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 3, in <module>
print(set_1)
NameError: name 'set_1' is not defined

pop():随机删除一个元素(测试如果有0,默认先删除0,其它随机)。

set_1 = {5,2,1,0,4}
set_1.pop()
print(f'pop后的set_1的值:{set_1}')
set_2 = {'c','a','b','d'}
set_2.pop()
print(f'pop后的set_2的值:{set_2}') # 打印内容如下
pop后的set_1的值:{1, 2, 4, 5}
pop后的set_2的值:{'b', 'c', 'a'}

remove(元素):根据元素进行删除,如果删除一个没有的元素会报错。

set_1 = {1,2,3}
set_1.remove(1)
print(set_1)
# 删除一个没有的元素
set_1.remove(10) # 打印内容如下
{2, 3}
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 5, in <module>
set_1.remove(10)
KeyError: 10

copy():集合的浅拷贝。

set_1 = {1,2,3}
temp = set_1.copy()
print(temp) # 打印内容如下
{1, 2, 3}

clear():清空集合。

set_1 = {1,2,3}
set_1.clear()
print(set_1) # 打印内容如下
set()

集合的其它操作

交集:两个集合里面都存在的数据,可以使用&或者使用函数intersection来获取两个集合的交集。

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 & set_2 # 通过&符号获取set_1和set_2的交集
print(set_3) # 打印内容如下:
{2, 3} # 通过函数intersection()获取交集
set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.intersection(set_2) # 通过函数获取set_1和set_2的交集 print(set_3) # 打印内容如下:
{'a', 'c'}

并集:将两个集合进行合并(集合是去重复的),使用|符号或者使用union()函数。

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 | set_2 # 使用|符号获取两个集合的并集
print(set_3) # 打印内容如下:
{1, 2, 3, 4, 40, 10} # 通过函数union()获取两个集合的并集
set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.union(set_2) # 使用union()函数获取两个数的并集
print(set_3) # 打印内容如下:
{'b', 'z', 'a', 'c', 'd'}

差集:从第一个集合中减去第一个集合和第二个集合共同存在的元素,使用符号-或者使用函数difference()来实现。

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 - set_2 # 通过符号-将set_1和set_2共同存在的元素从set_1中删除,如果set_2在前就从set_2中删除
print(set_3) # 打印内容如下:
{1, 4} set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.difference(set_2) # 通过函数difference()实现
print(set_3) # 打印内容如下:
{'d', 'b'}

反交集:将两个集合进行合并,并去除相同的元素,使用符号^或者symmetric_difference。

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 ^ set_2 # 使用^符号实现
print(set_3) # 打印内容如下:
{1, 4, 40, 10} set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.symmetric_difference(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
{'z', 'b', 'd'}

子集:一个集合是否被另一个集合所包含,如果被另一个集合包含返回True,否则返回False,使用<符号或者issubset()。

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 < set_2 # 使用<符号实现
print(set_3)
# 打印内容如下:
False set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issubset(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
True

超级:与子集相反,判断一个集合是否包含另一个集合,如果包含另一个集合返回True否则返回False,使用符号>或者issuperset()。

set_1 = {1,2,3,4,10,50,40}
set_2 = {10,2,40,3}
set_3 = set_1 > set_2 # 使用>符号
print(set_3) # 打印内容如下:
True set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issuperset(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
False

frozenset(可迭代对象):返回一个冻结的集合,被冻结的集合不能进行修改,删除,添加等操作,如果不写参数,则返回一个冻结的空的集合,参数是可迭代对象所以可以是列表,字典等
下面是一些简单的事例:

set_1 = {"a","b","c","d"}
dic_1 = {"字典":"值"}
list_1 = [1,2,3] set_2 = frozenset(set_1)
dic_2 = frozenset(dic_1)
list_2 = frozenset(list_1) print(type(set_2),set_2)
print(type(dic_2),dic_2) # 字典只能看键不能看值,很多方法都不能用
print(type(list_2),list_2) # 列表的下标也不能使用,大多数函数不能用 # 打印内容如下:
<class 'frozenset'> frozenset({'b', 'd', 'a', 'c'})
<class 'frozenset'> frozenset({'字典'})
<class 'frozenset'> frozenset({1, 2, 3})

下一篇:编码,解码,小数据池:https://www.cnblogs.com/caesar-id/p/10252202.html

Python字典、集合之高山流水的更多相关文章

  1. python -- 字典 集合

    1.字典          定义:字典是以 key :value 的形式来保存数据,用{} 来表示,存储的是 key : value        查找效率比较高(注:字典存储数据时,用的是hash值 ...

  2. python --->字典 集合 学习笔记

    1.字典--->创建空字典:dict={} broa=["李宁",”耐克“,“阿迪达斯”,“鱼c工作室”] sloga=[“A”,“B”,“C”,“D”] dict={&qu ...

  3. 3、Python字典集合

    2.3字典 字典是键值对的无序可变序列.键值之间用冒号隔开,相邻元素之间用逗号隔开,所有元素放在大括号之间{},键可以是Python中所有不可变的数据,不能用列表.元组.字典作为字典的键,键不可重复, ...

  4. Python字典和集合

    Python字典操作与遍历: 1.http://www.cnblogs.com/rubylouvre/archive/2011/06/19/2084739.html 2.http://5iqiong. ...

  5. Python学习笔记3-Python元组、数组、字典集合的操作

    在Python中数组中的每一项可以是不同的数据类型 元组:只能读不能写的数组 aTuple=(1,'abc','tmc',79.0,False) print aTuple[1:3] print typ ...

  6. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  7. **python中列表 元组 字典 集合

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...

  8. Python 字典dict 集合set

    字典dict Python内置字典,通过key-value进行存储,字典是无序的,拓展hash names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75 ...

  9. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  10. 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧

    实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...

随机推荐

  1. 【Scala篇】--Scala初始与基础

    一.前述 Scala是基于JVM的另一个语言. Scala官网6个特征. 1).Java和scala可以混编 2).类型推测(自动推测类型) 3).并发和分布式(Actor) 4).特质,特征(类似j ...

  2. Django+Bootstrap+Mysql 搭建个人博客(一)

    1.1.环境搭建 (1)虚拟环境 mkvirtualenv website pip install django==1.11.7 (2)创建项目和app:website和blog (3)设置中文set ...

  3. 『NOIP2018普及组题解』

    标题统计 题目描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字 符数时,空格和换行符不计算在内. 输入格式 ...

  4. 并发编程(八)—— Java 并发队列 BlockingQueue 实现之 ArrayBlockingQueue 源码分析

    开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现. 阻塞队列概要 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列的阻塞 ...

  5. Unity实现c#热更新方案探究(一)

    转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...

  6. Java 8的用法(泛型接口,谓词链)

    1.泛型接口 我们举个例子,以前来看一下JPA定义的写法: Specification接口为: public interface Specification<T> { Predicate ...

  7. 【ASP.NET Core快速入门】(七)WebHost的配置、 IHostEnvironment和 IApplicationLifetime介绍、dotnet watch run 和attach到进程调试

    WebHost的配置 我们用vs2017新建一个空网站HelloCore 这里的CreateDefaultBuilde实际上已经在内部替我们做好了默认配置. UseKestrel 使用kestrel ...

  8. Linux基础知识第四讲,文件内容命令

    目录 一丶常用命令 1.cat命令演示以及常用选项 2.grep 搜索命令的使用 3.echo 以及 重定向的使用 4.管道概念 一丶常用命令 序号 命令 对应英文 作用 01 cat 文件名 con ...

  9. Thread之九:stop

    搞过Java线程的人都知道,stop这个方法是臭名昭著了,早就被弃用了,但是现在任然有很多钟情与他的人,永远都放不下他,因为从他的字面意思上我们可以知道他貌似可以停止一个线程,这个需求是每个搞线程开发 ...

  10. 服务器SSH连接时间设置

    用SSH客户端连接linux服务器时,经常会出现与服务器会话连接中断现象,造成这个问题的原因便是SSH服务有自己独特的会话连接机制. 解决方案: 1.设置服务器向SSH客户端连接会话发送频率和时间 v ...