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()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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