python集合和字典的区别_Python中的字典和集合

导语:本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。

本文重点:

1、掌握常见的字典创建,查询,判别方法;

2、了解字典中的defaultdict、子类化Userdict和常见映射类型;

3、了解支撑字典和集合背后的散列表的工作原理。

一、常见的字典方法

1、创建方法

分为字面量句法和构造方法两种,下面以{"one":1,"two":2,"three":3}为例

d1={"one":1,"two":2,"three":3}#字面量句法

d2=dict(one=1,two=2,three=3)

d3=dict([("one",1),("two",2),("three",3)])

d4=dict({"one":1,"two":2,"three":3})

d5=dict(zip(["one","two","three"],[1,2,3]))#zip并行解包

print(d1==d2==d3==d4==d5)#True

以上五种方法创建的字典是相等的。

2、isintance

映射类型(Mapping Types)是一种关联式的容器类型,它存储了对象与对象之间的映射关系。

字典是Python中唯一的映射类型,它是存储了若干键值对(由键映射到值)的关联容器。

collections.abc模块中有两个抽象基类,分别是Mapping和MutableMapping,它们为dict和其他类似的类型定义形式接口。

isinstance:判定object的类型

语法:isinstance(object, classinfo)

其中,object 是变量,classinfo 是类型即 (tuple,dict,int,float,list,bool等) 和 class类

若参数object是classinfo类的实例,或者object是classinfo类的子类的一个实例, 返回 True;若 object 不是一个给定类型的的对象,则返回结果总是False。

若classinfo不是一种数据类型或者由数据类型构成的元组,将引发一个TypeError 异常。

eg:

from _collections_abc import Mapping

my_dict={}

print(isinstance(my_dict,Mapping))#判断数据是否为广义映射类型。输出True.

isinstance和type的区别:

若对象是classinfo中一个类的子类,isinstance可以判断出来返回True,而type是不能的。

3、字典推导

字典推导:在{}中使用命令语句加for甚至if实现迭代推导出新列表的操作。

Country_Codes=[(86,"China"),(91,"India"),(1,"United States"),(62,"Indonesia"),(55,"Brazil"),(92,"Pakistan"),(81,"Japan")]

dict1={country:code for code,country in Country_Codes}#推导过程

print(dict1)

dict2={code:country.upper() for code,country in Country_Codes if code>80}#由限制要求创建字典

print(dict2)

#输出:

{'China': 86, 'India': 91, 'United States': 1, 'Indonesia': 62, 'Brazil': 55, 'Pakistan': 92, 'Japan': 81}

{86: 'CHINA', 91: 'INDIA', 92: 'PAKISTAN', 81: 'JAPAN'}

4、setdefault:处理找不到的键

d.setdefault VS d.get

d.setdefault(k,[default])和d.get(k,[default])两种方法都可以处理找不到的键的情况,区别在于setdefault在返回默认值的同时能够在原字典创建新的k-default键值对。

所以更新某个键值对但键不一定存在时,用d.setdefault更好一些.

eg1:处理找不到的键

names=["Ailee","

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值