DAY7 Python基础: dict and set 2018-06-20

01-dict

02-dict operation

03-set and operation


**字典(dict)是一个容器类的数据类型,以键值对(key:value)的形式来存储数据
key:value   value:可以是任何类型的数据;key:理论上只能是不可变的数据类型,实际开发中一般用字符串

字典是可变的(可以增、删、改、查),但是是无序的(不能使用下标来访问元素)**

1.1.定义/声明一个字典(dict)

dict1 = {'name':'骆昊','age':18}  # 声明了一个字典对象,有两个键值对
dict2 = {'score':100,10:'aaa',(1, 20):[2, 4]}
print(dict1,dict2)

注意:可变的数据不能作为字典的key

dict3 = {[12, 3]:'abc'}     # TypeError: unhashable type: 'list'
print(dict3)

声明一个字典,存小明的姓名、年龄、成绩、颜值

message = {'name':'xiaoming','age':19,'score':89,'face':98}
print(message)

1.2.查

a.通过key取获取值:字典名[key]

print(message['age'])

注意:使用字典名[key]的形式去获取字典中元素的值的时候,key值必须是在字典中存在的。否则报KeyError错

# print(message[19])    # KeyError:19

b.通过get方法获取值:字典名.get(值)

获取字典中,不确定key对应键值对是否存在的时候,是使用get去获取对应的值

print(message.get('name'))

None:python中的一个特殊值,表示没有,类似c语言中的null

print(message.get('xiaoming'))      # value : none

练习:获取字典中'grade'对应的值,如果grade不存在就打印'不存在',否则直接打印grade对应值

if message.get('grade') == None:
    print('grade nonexistence')
else:
    print(message.get('grade'))

1.3.遍历

直接遍历字典拿到的是字典中所有的key值

for key in message:
    print(key,message[key])

可以同时拿到key和value
字典名.items():会将字典转换成列表,键值对转换成元组,实际开发中不建议使用,消耗CPU

print(message.items())
for (key, value) in message.items():
    print('two===',key, value)

1.4.修改

通过key去拿到对应的元素,重新赋值

dict3 = {'a':1, 'b':2, 'c':3}
dict3['a'] = 10
print(dict3)

练习:将上面字典中所有的值变为原来的三倍

for key in dict3:
    dict3[key] *= 3
print(dict3)

1.5.增加

通过key取值,然后赋值(如果该key不存在,就是增加键值对;如果key存在,就是修改对应的值)
增加键值对:'d':4

dict3['d'] = 4
print(dict3)

注意:字典里面的key是唯一的

dict4 = {'a':1, 'b':2, 'a':10, 'a':'abvc'}
print(dict4)    # value :{'a': 'abvc', 'b': 2}

1.6.删除(删除的是键值对)

a.del语句

格式:del 字典[key]

dict1 = {'a':10, 'b':10.3, 'c':False, 'd':[1, 2, 3]}
del dict1['b']      # 删除'b'对应的键值对
print(dict1)

b.pop 方法

格式:字典.pop(key)

dict1 = {'a':10, 'b':10.3, 'c':False, 'd':[1, 2, 3]}
result = dict1.pop('a')     # value: 10 被删除的键值对的值
print(dict1,result)

c.popitem方法:随机删除(取出)一个元素

dict1 = {'a':10, 'b':10.3, 'c':False, 'd':[1, 2, 3]}
dict1.popitem()
print(dict1)

练习:将字典中,值为字符串的全部删除

dict1 = {'a':10, 'b':10.3, 'c':False, 'd':[1, 2, 3], 'e':'abd'}
for key in dict1.copy():    # 确保所有key都会遍历一遍,用copy函数拷贝一遍
    if isinstance(dict1[key],str):
        del dict1[key]
print(dict1)

02-dict operation

2.1.keys 和 values 方法

注意:返回的列表,可以用forLoop遍历里面的元素,但是,不能直接直接取下标进行操作,需用list()进行转换

dict1 = {'a':1, 'b':2, 'c':3}

字典.keys():获取字典中所有的key,结果是一个列表

print(dict1.keys())

字典.values():获取字典中所有的值,结果是一个列表

print(dict1.values())

字典组成的列表进行排序

list1 = [{'a':3}, {'b':1}, {'c':2}]
list2 = sorted(list1, key=lambda item:list(item.values()), reverse=True)
# list2 = sorted(list1, key=lambda item:list(item.items())[0], reverse=False)
print(list2)
for item in list1:
    print(item.values())
    print(list(item.values()))

dict1 = {'a':3, 'b':1, 'c':2}
result = dict1.values()
print(result, type(result))
# print(result[1]) # TypeError: 'dict_values' object does not support indexing
print(list(result))

# value:
# [{'a': 3}, {'c': 2}, {'b': 1}]
# dict_values([3])
# [3]
# dict_values([1])
# [1]
# dict_values([2])
# [2]
# dict_values([3, 1, 2]) <class 'dict_values'>
# [3, 1, 2]

2.2.update

dict1.update(dict2):用字典2中的元素取更新字典1中的元素(如果字典2中的键值对字典1中没有,就直接添加;有就修改)

dict1.update({'c':123, 'e':'dgg'})
print(dict1)

2.3.in 和 not in:判断key是否在dict里

print('a' in dict1)
print(100 in dict1)

03-set and operation

集合是一种容器,并且是无序,元素的值是唯一的(不能重复)
是通过{}去存储元素,多个元素之间用逗号隔开。

3.1.声明一个集合

set1 = {1, 2, 7, 3, 4, 1, 5}
print(set1)     # value: {1, 2, 3, 4, 5, 7}

将列表转换成集合

set2 = set('abcndgsag')
print(set2)

将其他的数据转换成集合,自带一个去重的功能
将列表转换成集合

set3 = set([1, 2, 2, 2, 4])
print(set3)

将字典转换成集合(是将字典的key取出来作为集合)

set4 = set({'a':12, 'b':3})
print(set4)

练习:将字符串str1 = 'adasgaaaaaadgbbbbfdgf'去重

str1 = 'adasgaaaaaadgbbbbfdgf'
# 列表去重
# 将字符串转换成集合
set1 = set(str1)
print(set1)
# 将集合转换成列表并排序
list1 = list(set1)
list1.sort()
print('list1',list1)
str1 = ''
# 遍历列表,将字符用+连接在一起
for item in list1:
    print(item)
    str1 += item
print(str1)

3.2.查

不能单独的获取某一个元素,只能通过遍历的方式去获取每一个元素

for item in set1:
    print(item,end=',')

3.3.增加

a. update()

set1.update(set2):将集合2中的元素添加到集合1中

set1 = set('123456')
set2 = set('abcd1')
set1.update(set2)
print('\n=====',set1)

b. add

set.add(元素):将指定的元素添加到指定的集合中
set1.add('aaa')
print(set1)

3.4.删除

set.remove():将指定的元素从集合中删除

set1.remove('1')
print(set1)

python中的集合除了拥有作为容器相关的操作以外,还拥有数学中集合有关的操作

3.5.判断包含关系:>= 、<=

set1 = set('abcdef')
set2 = set('abc')

# 集合1>=集合2:判断集合1中是否包含集合2,结果是bool值
print(set1>=set2)
set3 = set('abcg')
print(set1>=set3)

# 集合1<=集合2:判断集合2中是否包含集合1,结果是bool值

3.6.|,&,-,^

set1 = set('123456')
set2 = set('456789')
print(set1,set2)

a.|:求并集

print(set1|set2) # {'9', '7', '5', '8', '4', '2', '3', '1', '6'}

b.&:求交集

print(set1&set2) # {'6', '5', '4'}

c.-:求差集 在set1但不知set2中的所有的元素

print(set1-set2) # {'2', '3', '1'}

d.^:获取set1和set2中除了公共部分以外的元素

print(set1^set2) # {'1', '3', '9', '7', '2', '8'}

3.7.copy

将set1中所有的元素取除来创建一个新的集合

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

推荐阅读更多精彩内容

  • 一、Python中数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但...
    大嘴蝸牛阅读 993评论 0 5
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,903评论 17 410
  • 渡人,是向外施善,是品德的外化——示柔以化人; 渡己,是向内反省,是改过的修行——用刚以律己。 二者一内一外,一方...
    张三峡阅读 368评论 0 4
  • 一:安装 Webpack 本身只能处理 JavaScript 模块 (1)要先安装Node.js,Node.js自...
    野小宝阅读 467评论 0 0
  • 一个人的性格是由他的价值观决定的。而所谓的价值观,其实就是一个人分辨好坏主次的思维体系。 每个人都有自己的价值观,...
    c_3e47阅读 249评论 0 1