python基本数据类型---字典&集合

引入

在内存中存储的数据可以是不同的数据类型。比如名字可以使用字符串存储,年龄可以使用数字存储,python有6种基本数据类型,用于各种数据的存储,分别是:numbers(数字类型)、string(字符串)、List(列表)、Tuple(元组)、Dictionary(字典).

本文介绍字典和集合。

字典类型(Dict)

定义

字典是可变类型的容器数据类型,可以存储任意数据类型的对象。{}内用逗号分隔开多个key:value,其中value可以是任意类型的值,key必须是不可变类型(字符串、数字、元组),一般是对value具有描述性质的字符串,键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

# 创建字典的两种方式
dic = {'x': 'x', 'y': 'y'}  # 方式一
dic = dict(x='x', 'y'=y)  # 方式二

操作字典的方法

按照key存/取值

d={'k1':111}

#针对赋值操作:key存在,则修改
d['k1']=222

#针对赋值操作:key不存在,则创建新值
d['k2']=3333
print(d)  # {'k1': 222, 'k2': 333}

len()

字典的键值对个数,当有key重复的时候,只记一次。

d={'k1':111,'k2':2222,'k1':3333,'k1':4444}
print(d)  # {'k1': 4444, 'k2': 2222}
print(len(d))  # 2

成员运算

判断key是否包含在字典中

d={'k1':111,'k2':2222}
print('k1' in d)  # True
print(111 in d)   # False

删除操作

del

通用删除,没有返回值

d={'k1':111,'k2':2222}
del d['k1']
print(d)  # {'k2': 2222}
pop()

根据key删除元素,会返回被删除的key对应的value

d={'k1':111,'k2':2222}
res=d.pop('k2')
print(d)  # {'k1': 111}
print(res)  # 2222
popitem()

popitem随机删除一组键值对,将被删除的键值对以元组的方式返回

d={'k1':111,'k2':2222}  
res=d.popitem()
print(d)  # {'k1': 111}
print(res)  # ('k2', 2222)
keys() values() items()

在Python2中得到的分别是字典的所有key的列表、所有value的列表、所有键值对元组的列表,缺点是如果数据量非常大会很占用内存空间。

>>> d={'k1':111,'k2':2222}
>>> d.keys()
['k2', 'k1']

>>> d.values()
[2222, 111]

>>> d.items()
[('k2', 2222), ('k1', 111)]

在python3中得到的是会'下'出每个值的老母鸡,不会占用内存空间。

>>> d = {'name':'python','age':12}
>>> d.keys()
dict_keys(['name', 'age'])
>>> d.values()
dict_values(['python', 12])
>>> d.items()
dict_items([('name', 'python'), ('age', 12)])

循环遍历

遍历字典中的key
for k in d.keys():
 print(k)

for k in d:
 print(k)
遍历字典的value
for value in d.values():
 print(value)
遍历字典中的键值对
for key, value in d.items():
 print(key, value)

其他内置方法

clear()

清空字典

d = {'name':'python','age':12}
d.clear()
pritn(d)  # {}
update()

用其他字典更新当前字典,存在的键值对进行覆盖,不存在的进行添加

d = {'name':'python','age':12}
d.update({'sex': ',male', 'name': 'tony'})
print(d)  # {'name': 'tony', 'age': 12, 'sex': ',male'}
get()

根据key取值,容错性高,弥补了使用[]取值时key不存在报错的问题

d = {'a':'gg','k':21}
# 弥补当key不存在时会报错的问题,不会报错,会返回None
print(d['k3'])  # 会报错
d.get('k3')    # 会返回none,容错性好

集合(Set)

定义

在{}内用 , 分隔开多个元素,

s = {}  # 空的花括号默认定义的是空字典
print(type(s))  # <class 'dict'>

s = set()  # 通过这种方式得到的才是空集合

集合内的元素必须满足以下三个条件:

1.集合内的元素必须为不可变类型

s2 = {[1,2,3],1}  
print(s2)
# 会报错
TypeError: unhashable type: 'list'  # 不可哈希是可变类型</pre>

2.集合内元素无序
```python
s = {1,2,'a',(1,4)}  # 底层是调用了set()功能
print(s)

3.集合内元素没有重复,可以进行去重操作

s = {1,1,1,1,1,2,2}
print(s)  # {1, 2}

类型转换

相当于底层调用for循环,取出每一个值放在集合中

# 对字符串进行转换,会自动将字符串中重复的去掉
s = set('hellollllop'))

# 对列表进行转换
s = set([1,2,3,4,5,6])
# s = set([1,2,3,4,5,6,[1,2]])  会报错
# print(s)

# 对字典进行转换
s = set({'k1':12,'k2':13}.items())
s = set({'k1':12,'k2':13})
s = set({'k1':12,'k2':13}.values())

操作集合的方法

关系运算

两个集合可以进行数学中的交集、并集等运算。

a = {1, 2, 3}
b = {2, 3, 4}
交集

求两个集合共同的值,两种方法

res = a & b  # {2, 3}
res1 = a.intersection(b)  # {2, 3}
并集

两个集合所有的值,重复的去掉, 两种方式

res = a | b  # {1, 2, 3, 4}
res1 = a.union(b)  # {1, 2, 3, 4}
差集

比如,取a集合独有的值,a为被减,两种方式

res = a - b  # {1}
res1 = a.difference(b)  # {1}
对称差集

两个集合分别独有的值组成一个新的集合,两种方式

res = a ^ b  # {1, 4}
res1.symmetric_difference(b)  # {1, 4}
父子集

判断一个集合是否是另一个集合的父集/子集,如果两个集合相等,互为父子集

s4 = {1,2,3}
s5 = {1,2}

res = s4.issubset(s5)  # False 判断s4是否是s5的子集
res1 = s4.issuperset(s5)  # True 判断s4是否是s5的父集

去重操作

集合的去重操作有局限性,只能对不可变类型的数据进行去重,并且无法保证原来的顺序。针对可变类型数据的去重操作,需要自己编写代码完成功能。

# 去掉列表中重复的字典
l=[
 {'name':'lili','age':18,'sex':'male'},
 {'name':'jack','age':73,'sex':'male'},
 {'name':'tom','age':20,'sex':'female'},
 {'name':'lili','age':18,'sex':'male'},
 {'name':'lili','age':18,'sex':'male'},
]
new_l = []
for info in l:
 if info not in new_l:
 new_l.append(info)
l = new_l

len()

集合中元素的数量

a = {1, 2, 3, 4}
print(len(a))  # 4

成员运算

判断某个元素是否包含在集合中,结果是True或者False

print(1 in a)  # True
print(5 not in a)  # True

循环遍历

for i in a:
 print(a)

其他内置方法

discard() remove() pop()
# discard()删除指定元素,元素不存在不会报错,do nothing
a = {1, 2, 3, 4}
a.discard(5)
print(a)  # {1, 2, 3, 4}
a.discard(4)
print(a)  # {1, 2, 3}

# remove()删除指定元素,元素不存在报错
a.remove(4)  # KeyError: 4

# pop()随机删除,返回被删除的元素
res = a.pop()
print(res)  # 1
update()

使用另一个集合对当前集合进行更新,自动进行去重

a = {1, 2, 3, 4}
a.update({1, 2, 3, 4, 5})
print(a)  # {1, 2, 3, 4, 5}
add()

为集合增加新的值

a.add(8)
isdisjoint()

判断两个集合是否完全独立,没有相同的部分

print(a.isdisjoint({1,2,3}))  # False

文末

如果你觉得我写的不错,就请给个赞赏吧,欢迎关注我的微信公众号:程序媛小庄,获取更多python知识哦~

更多精彩python教程请来B站关注我哦:python零基础入门---大白话版本来了_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343