day8-字典和集合

1.字典相关操作

1)运算符

字典不支持+、*、<、>、<=、>=;只支持:==,!=

print({'a': 2, 'b': 3} == {'b': 3, 'a': 2})    # True

2)in/not in

键 in 字典 - 判断字典中是否存在指定的键

dict1 = {'a': 2, 'b': 3}
print(10 in dict1)      # False
print('a' in dict1)     # True

3)相关函数

  • len()
  • dict(序列) - 将其他数据转换成字典;数据本身必须是序列,序列中的元素是小序列,小序列有且只有两个元素,第一个元素不可变
    字典不能转换成数字,但可以转换成布尔;
    字典可以转列表
seq = ('ab', '12', '34')
print(dict(seq))

student1 = {'name': '小明', 'age': 19, 'gender': '男'}
list1 = list(student1)
print(list1)

4)相关方法

a.字典.clear() - 清空字典

student = {'name': '小明', 'age': 19, 'gender': '男'}
student.clear()
print(student)

b.字典.copy() - 拷贝字典产生一个新的字典(浅拷贝)

student = {'name': '小明', 'age': 19, 'gender': '男'}
new_student = student.copy()
print(new_student)
new_student['name'] = '小华'
print(student, new_student)

c.dict.fromkeys(序列,值) - 创建一个字典,将序列中的元素作为key,key对应的value都是指定的值

dict2 = dict.fromkeys(['name', 'color', 'gender', 'age'], 100)
print(dict2)

d.字典.item() - 将字典中所有的键值对都转换成元组作为一个序列的元素

student = {'name': '小明', 'age': 19, 'gender': '男'}
print(student.items())   # dict_items([('name', '小明'), ('age', 19), ('gender', '男')])

# 字典.value()  - 获取字典中所有的值,返回一个序列
print(student.values())    # dict_values(['小明', 19, '男'])

# 字典.keys()   - 获取字典中所有的键,返回一个序列
print(student.keys())      # dict_keys(['name', 'age', 'gender'])

e.字典.setdefault(key,value) - 当key不存在的时候添加键对(不会修改)

student = {'name': '小明', 'age': 19, 'gender': '男'}
student.setdefault('score', 90)
print(student)

# student['score'] = 80
student.setdefault('score', 80)
print(student)

f.字典1.update(字典2) - 将字典2中的键对添加到字典1中

person = {'name': '小明', 'height': 179, 'weight': 70}
student.update(person)
print(student)   # {'name': '小明', 'age': 19, 'gender': '男', 'score': 90, 'height': 179, 'weight': 70}

5)字典数据结构的设计

system = {
    'user_name': 'abc',
    'password': '123123',
    'manager': {'name': '张三', 'tel': '19102190192'},
    'student': [
        {'name': 'a', 'study_id': '111', 'age': 16},
        {'name': 'b', 'study_id': '112', 'age': 18},
        {'name': 'c', 'study_id': '113', 'age': 19}
    ]
}

2.集合

1.什么是集合(set)

a.集合

集合是容器型数据类型;将{}作为容器标志,多个元素用逗号隔开:{元素1,元素2,...}
集合是可变的,无序的

b.元素

集合中的元素必须是不可变的数据,而且是唯一(自带去重功能)

set1 = {12, 'an', (10, 20)}
print(set1)

# set2 = {12, 'an', [10, 20]}  # TypeError: unhashable type: 'list'

set3 = {12, 'an', (10, 20), 12}
print(set3)

print({1, 2, 3} == {3, 2, 1})   # True,说明无序

# {}表示空字典
set4 = {}
print(type(set4))   # <class 'dict'>

# 空集合
set5 = set([])
print(type(set5))   # <class 'set'>

# 集合去重:set(序列)  - 将序列转换成集合(自动去重)
list1 = [11, 29, 90, 11, 28, 7, 66]
list1 = list(set(list1))
print(list1)

2)集合元素的增删改查 (不重要)

a.查 - 获取集合元素,只有遍历一种方法

for 变量 in 集合:
pass
补充:遍历字典和集合的时候,其实是遍历将字典或者集合转换成的列表

names1 = {'c', 'b', 'a'}
for name in names1:
    print(name)

b.增

a.集合.add(元素) - 在集合中添加一个元素
b.集合.update(序列) - 将序列中的元素添加到集合中

names1.add('d')
print(names1)

names1.update([100, 200])
print(names1)

names1.update('how')
print(names1)

c.删:集合.remove(元素) - 删除集合中指定的元素

names1.remove('a')
print(names1)

d.改 (不支持改操作)

3)集合相关操作

a.运算符:只支持判断相等的==,!=

# print({1, 2, 3} + {4, 5})  不支持

b.in / not in

names1 = {'c', 'b', 'a'}
print('a' in names1)   # True

c.len,max,min,sum,sorted,set

4)数学集合运算(重要!)

python中的集合直接支持数学的集合运算:|(并集),&(交集),-(差集),^(对称差集),>/<(判断包含)

set1 = {1, 2, 3, 4, 5}
set2 = {3, 9, 2, 4, 0, 8}

# 1)集合1 | 集合2    - 将两个集合合并在一起
print(set1 | set2)

# 2)集合1 & 集合2    - 获取两个集合的公共部分
print(set1 & set2)

# 3)集合1 - 集合2    - 获取集合1中除了集合2剩下的部分
print(set1 - set2)
print(set2 - set1)

# 4)集合1 ^ 集合2    - 获取集合1和集合2除了公共部分以外的部分
print(set1 ^ set2)

# 5)集合1 > 集合2    - 判断集合1中是否包含集合2(判断集合2是否是集合1的子集)
print(set1 > set2)        # False
print({1, 2, 3} > {1})    # True

字符串和字符

1)什么是字符串(str)

字符串是容器型数据类型(序列);将''或""作为容器的标志,多个字符(元素)直接包含在引号中
字符串是不可变的、有序的

str1 = ''
str2 = 'akq,1哈哈'

2)字符串中的元素(字符)

字符串中元素叫字符
1)普通字符
2)转义字符:在指定的符号或者字母前加\来表示特殊功能或者特殊意义的字符
' - 表示一个单引号
" - 表示一个双引号
\n - 换行符
\t - 制表符
\ - 表示一个
注意:一个转义字符的长度是1

str3 = '123\'abc'
print(str3)

str4 = '床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。'
print(str4)

str5 = '\t床前明月光,\n\t疑是地上霜。\n\t举头望明月,\n\t低头思故乡。'
print(str5)

str6 = '123\\nabc'
print(str6, len(str6))

3)编码字符: \u4位的十六进制数表示一个字符;数字对应值是字符对应的编码值
字符编码:计算机在存储数据的时候只能存数字。计算机存储文字(字符)的时候实质存的是文字对应的数字,每个文字都会对应一个固定的数字,这个数字就是字符的编码。

编码表:每个字符和数字的一一对应关系就是编码表。常见的编码表有两种:ASCII表、Unicode编码表, Unicode编码表是对ASCII表扩展。

chr(编码值) - 获取编码值对应的字符
ord(字符) - 获取字符对应的编码值

str7 = '一\u4e00\u9fa5'
print(str7)

print(chr(97), chr(65))
print(ord('a'), ord('A'))

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

推荐阅读更多精彩内容

  • 1.元祖 1.什么是元祖 使用()将多个元素扩起来,多个元素之间用逗号隔开a.容器,可以同时存储多个数据,不可变的...
    烟雨江畔丶阅读 91评论 0 0
  • 01-元祖 1.什么是元祖 使用()将多个元素括起来,多个元素之间用逗号隔开a.容器,可以同时存储多个数据,不可变...
    佐手牵鼬手_89a9阅读 88评论 0 0
  • 元祖 1.什么是元祖使用()将多个元素括起来,多个元素之间用逗号隔开a.容器,可以同时存储多个数据,不可变的,有序...
    芽菜包66阅读 121评论 0 0
  • 一、元组 1.什么是元组 使用()将多个元素括起来,多个元素之间用逗号隔开。a.容器,可以同时存储多个数据,不可变...
    xdxh阅读 162评论 0 0
  • 元组 1.什么是元组 使用()将多个元素括起来,多个元素之间用逗号隔开a.容器,可以同时存储多个数据,不可变的,有...
    莫名ypc阅读 213评论 0 0