DAY5 字典
- 字典是一对一对的键值对
- 同时保存多个含义不相同的数据----字典
- 意义性质相同----列表
1.列表和字典的选择
如果需要同时保存多个意义相同的数据使用列表,意义不同使用字典
2.什么是字典
"""
1)字典是容器型数据类型;将{}作为容器的标志,
里面多个键值对(元素)用逗号隔开:{'键1':值1, '键2':值2,'键3':值3}
2)字典是可变的,字典是无序的
3)字典的元素
a.元素必须是键值对
b.键必须是不可变的类型的数据(字符串 数字 布尔 元组等,一般使用字符串作为键)
c.键是唯一的
d.值可以是任何类型的数据
"""
#1)空字典
d1 = {}
# 2)字典是无序的
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10}) #True
# 3)字典的键必须四不可变类型的数据
d2 = {'a': 10, 20:30, 1.2: 40, (10, 20): 50}
# 4)键是惟一的
d3 = {'a': 10, 'a': 100, 'b': 20}
print(d3) #{'a': 100, 'b': 20}
# 5)值可以是任何类的数据
student = {'name': '小明', 'gender': '男', 'age': 18, 'height': 97, '体重': 40, 'score': 67}
class1 = {
'name': 'python2301',
'teacher': {'name': '余婷', 'age': 18, 'tel': '13678192302'},
'students': [
{'name': '小明', 'age': 28, 'school': '清华大学', '专业': '计算机'},
]
}
3.字典的增删改查
1.查 - -获取字典的值
#1)查单个 -获取某一个值
"""
语法:字典[键] -获取字典中指定键对应的值
"""
举例1:
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色','price': 10} print(dog['name']) print(dog['breed']) print(dog['price']) # print(dog['weight']) # KeyError: 'weight' 打印列表中不存在的数据会报错
举例2:
class1 = { 'name': 'python2301', 'teacher': {'name': '余婷', 'age': 18, 'tel': '13678192302'}, 'students': [ {'name': 'stu1', 'age': 19, 'school': '清华大学', '专业': '经济', 'contact': {'name': '张三', 'tel': '110'}}, {'name': 'stu2', 'age': 28, 'school': '北京大学', '专业': '大数据', 'contact': {'name': '李四', 'tel': '192'}}, {'name': 'stu3', 'age': 22, 'school': '厦门大学', '专业': '计算机', 'contact': {'name': '王五', 'tel': '920'}}, {'name': 'stu4', 'age': 17, 'school': '南京大学', '专业': '物联网', 'contact': {'name': '赵六', 'tel': '2833'}}, ] } # 1)获取班级的名称 print(class1['name']) # 2)获取讲师的名字 print(class1['teacher']['name']) # 3)获取所有学生的名字和对应的学校 for stu in class1['students']: print(stu['name'], stu['school']) # 4)获取未成年学生的名字 for stu in class1['students']: if stu['age'] < 18: print(stu['name']) # 5)获取第一个学生联系人的电话 print(class1['students'][0]['contact']['tel'])
2.增. 改
""" 1)字典[键] = 值 -当键存在就修改这个键对应的值;不存在就添加键值对 2)字典.setdefault(键,值) -添加键值对(键不存在就添加,存在不会修改) """
# 1)语法1: dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色','price': 10} print(dog) dog['name'] = '金山' print(dog) #{'name': '金山', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10} dog['gender']= 'female' print(dog) #{'name': '金山', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10, 'gender': 'female'} # 语法2: dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色','price': 10} print(dog) dog.setdefault('name', '多多') print(dog) dog.setdefault('gender', '公狗') print(dog) # 案例 给所有没有折扣的商品添加discount的值为1 goods_list = [ {'id': 'g001', 'price': 89, 'count': 100}, {'id': 'g001', 'price': 207, 'count': 50, 'discount': 0.9}, {'id': 'g001', 'price': 102, 'count': 33}, {'id': 'g001', 'price': 25, 'count': 897, 'discount': 0.88} ] for x in goods_list: x.setdefault('discount', 1) print(goods_list)
3.删 --删除键值对
"""
1)del 字典[键] -删除字典中指定键对应的键值对
2)字典.pop -删除字典中指定键对应值
"""
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色','price': 10} print(dog) del dog['breed'] print(dog) print('--------------------人间枝头,各自乘流------------------------') result1 = dog.pop('color') print(dog, result1)
4.字典的相关操作
# 1)in 和 not in
# 键 in 字典 -判断字典中是否存在指定的键值对
d1 = {'a': 10, 'b': 20, 'c': 30}
print('a' in d1) #True
print('10' in d1) #False
4.字符串
1)字符串
"""
1)容器型数据类型str,可以同时保存多个文字符号;将'' 或者" "作为容器标志
引号中的每个符号就是字符串中的元素
2)字符串是不可变的;字符串是有序的--->顺序影响结果
3)元素:
引号中的每个独立的符号
可以是任何国家任何民族的任何语言符号,还可以是转义字符
4)转义字符 -在特定的符号前加\ 来表示特殊功能或者特殊意义的符号
一个转义字符的长度为1
\n = \r -换行
\t -水平制表符(相当于按了一个tab键)
\' -表示一个普通的单引号
\" -表示一个普通的双引号
\\ -表示一个普通的反斜杠
"""
2)查 -获取字符
# 1)查单个:字符串[下标] -获取指定下标对应的元素
str1 = '\thello world!'
print(len(str1))
print(str1[1]) # h
print(str1[-2]) #d
#
2)遍历
"""
a.
for 变量 in 字符串:
循环体
b.
for 变量 in range(len(字符串)):
循环体
"""
#举例:
str2 = 'abd123'
for x in str2:
print(x) # a b d 1 2 3
for x in range(len(str2)):
print(x, str2[x])
3.字符串相关操作
- 1)字符串加法运算 -字符串拼接
字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'hello'
str2 = 'Python'
str3 = str1 + '' +str2
print(str3) # helloPython
- 2)字符串乘法运算
字符串N ,N字符串 -将字符串中的元素重复N次产生一个新字符
str1 = 'hello'
print(str1 * 3)str4 = 'abc'
new_str = ''
for x in str4:
new_str = new_str + x + '*' #等同于 new_str += x + '*'
print(new_str) # hellohellohello
案例:
# 案例:在字符串str4中每个字符后添加一个* # str4 = 'abc' ->'a*b*c' str4 = 'abc' new_str = '' for x in str4: new_str = new_str + x + '*' #等同于 new_str += x + '*' print(new_str) # hellohellohello
- 3)字符串的比较运算
比较第一队不相等的字符大小(比的是字符编码值大小ASCll编码)
print('ab' > 'MN')
"""
判断x是否是数字字符:'0' <= x <= '9'
判断x是否是小写字母: 'a' <= x <= 'z'
判断x是否是大写字母:'A' <= x <= 'Z'
判断x是否是字母:'a' <= x <= 'z' or 'A' <= x <= 'Z'
"""
案例:
# 案例:提取字符串中所有的数字字符 # eg:# 'sj23没说是你289sjsj 2=3-=29' -> '232892329' str1 = 'sj23没说是你289sjsj 2=3-=29' new_str = '' for x in str1: if '0' <= x <= '9': new_str += x print(new_str)
- 4)in 和 not in
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)
#举例:
list1 = [10, 20, 30, 40]
print(10 in list1) #True
print([10, 20] in list1) #Flase
print('--------------------人间枝头,各自乘流------------------------')
# eg:
str1 = 'abc123'
print('a' in str1) #True
print('ab' in str1) #True
print('ac' in str1) #False