tuple2 = (10,)
tuple2 = 10,
print(type(tuple2))
tuple1 = (1,2,3,4)
a,b,c,d = tuple1
print(a,b,c,d)
a,b,*c = tuple1
print(a,b,c)# 匹配出列表[]
结果:
1 2 3 4
1 2 [3, 4]
s = 'abcdef'
a,b,*c = s
print(a,b,c)
结果:
a b ['c', 'd', 'e', 'f']
list1 = [1,2,3,4]
a,b,*c = list1
print(a,b,c)
结果:
1 2 [3, 4]
1.通过键(key)而不是通过索引来读取
字典也称为关联数组或者散列表(hash),提示通过键(key)将一系列的值(value)联系起来,所以想要读取字典必须通过键(key)来读取,而不能通过索引来读取
注:因为字典是无序的可变序列,所以所以索引的下标并不存在,索引无效。
2.字典是任意对象的无序组合
字典是无序的,各项是从左到右随机排序的,及保存在字典当中的项没有特定的顺序,这样可以提高查找速度。
3.字典是可变的,并且是可以任意嵌套
字典可以在任意处正常或缩短(无需生成一份副本)并且他支持任意深度的嵌套(字典的值可以使列表或者其他子字典)(字典的深拷贝与浅拷贝)
4.字典中的键必须是唯一
不允许同一个键出现两次,如果出现两次,则后一个值会被记住,第一个会被忘记。(当字典中的key有重复的,后面的回替换前面的。)
5.字典中的键必须不可变
字典中的键是不可改变的,所以可以使用数字、字符串或者元组,但不能使用列表。
注:当字典中的键(key)重复的时候,后面的会覆盖前面的。
['ab','cd']
[1,2],'ab',(a,b)
['a']
dict3 = dict(([('name','郭靖'),('age',30 ),('gender','男')]))
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print(len(dict1))
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print('name' in dict1) # not in 同理
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print(dict1['name1'])
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print(dict1.get('ag1','没有找到'))
print(dict1.get('age'))
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
dict1['gongfu'] = '五毒拍砖掌' # 特性实例展示
dict1['name'] = '黄老邪' # 修改字典实例展示
print(dict1)
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
result = dict1.setdefault('name','黄老邪')# 特性1展示实例
# result1 = dict1.setdefault('name3','郭襄')# 特性2展示实例
print(result,dict1)
# print(result1,dict1)
d1 = {
1 : '1',
2 : '2'
}
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
dict1.update(d1)
print(dict1)
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
del dict1['name1']
print(dict1)
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
result = dict1.popitem()
# print(result) # 特性展示实例
print(dict1)
结果:
('name1', '黄蓉')
{
'name': '郭靖', 'age': 30, 'gender': '男'
# dict1 = {'name':'郭靖',
# 'age': 30 ,
# 'gender':'男',
# 'name1':'黄蓉'
# }
# result = dict1.pop('name1')
# print(result,dict1)
结果:
黄蓉 {
'name': '郭靖', 'age': 30, 'gender': '男'}
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
dict1.clear()
print(dict1)
结果:
{
}
dict1 = {
'name':'刘亦菲',
'age': 18 ,
'gender':'女',
'a': {
'name' : '周慧敏',
'age' : '21',
}
}
dict2 = dict1.copy()
print(id(dict1),id(dict2))
print(id(dict1['a']), id(dict2['a']))
结果:
/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/基础班第11期/day-07/上课代码/字典的深拷贝与浅拷贝.py
140677664519488 140677664519808
140677664519424 140677664519424
Process finished with exit code 0
2. 字典的深拷贝:
注:把所有层次的数据重新拷贝成为一个新的对象
import copy
dict1 = {
'name': '刘亦菲',
'age': 18,
'gender': '女',
'a': {
'name': '周慧敏',
'age': '21',
}
}
dict2 = copy.deepcopy(dict1)
print(id(dict1), id(dict2))
print(id(dict1['a']), id(dict2['a']))
结果:
/Volumes/苹果微软公共盘/PycharmProjects/venv/bin/python /Volumes/苹果微软公共盘/PycharmProjects/基础班第11期/day-07/上课代码/字典的深拷贝与浅拷贝.py
140441184396096 140441197411008
140441184396032 140441197509760
Process finished with exit code 0
总结:当改变字典dict1时,dict2未发生变化
拓展:
1 . 通过value,进行遍历
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print(dict1.values())
2 .通过key,进行遍历
dict1 = {
'name':'郭靖',
'age': 30 ,
'gender':'男',
'name1':'黄蓉'
}
print(dict1.keys())
for k in dict1.keys():
print(dict1[k])
3.dict.items()
dict1 = {
'name':'郭靖',
'age': 30 ,
# 'gender':'男',
'name1':'黄蓉'
}
print(dict1.items())
for k,v in dict1.items():
print(k, '=' , v)
结果:
dict_items([('name', '郭靖'), ('age', 30), ('name1', '黄蓉')])
name = 郭靖
age = 30
name1 = 黄蓉
集合的表示方法:set{}
1 .集合只能存在不可变的对象
2 .集合中存储的对象是无序的,没有索引
3 .集合不能出现重复的元素----去重set()
4 .创建集合
5 . 去重操作
6 .将字典转换为集合的时候,只会包含字典当中的key
set1 = {
(1,2),'ab',True,None}
print('ab' in set1)
set1 = {
(1,2),'ab',True,None}
print(len(set1))
set1 = set()
set1.add(1)
print(set1)
s1 = set('hello')
s2 = set('python')
s1.update(s2)
print(s1)
set1 = {
'a','b',1,2}
r = set1.pop()
print(set1)
print(r)
set1 = {
'a','b',1,2}
set1.remove('a')
print(set1)
结果:
{
1, 2, 'b'}
set1 = {
'a','b',1,2}
set1.clear()
print(set1)
结果:
set()
扩展:可变类型与不可变类型
1、不可变类型:Number(数字)、String(字符串)、Tuple(元组)。
2、可变类型:可以变:Set(集合)、List(列表)、Dictionary(字典)。
作业1:
'''
a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}} 找到python1/python2/python3
'''
分析+代码:
# 1.首先确定我们需要找到值(value)
# value在第三个元素的value中
# 2.通过get()函数取出第二元素的值(value)
b = a.get("data")
# print(b) #检验是否将第二项元素value元素取出并创建新的字典B
# 3.通过get()函数取出第三元素的值(value)
c = b.get("result")
# print(c)# 检验是否创建了新的列表C
# c = [{'src': 'python1'}, {'src': 'python2'}, {'src': 'python3'}]
# 4.将列表c的元素取出生成新的字典d1 d2 d3
d1 = c[0]
d2 = c[1]
d3 = c[2]
#d3 = c.pop(2)
# print(d1,d2,d3)
# 5.打印出value
print(d1['src'])
print(d2['src'])
print(d3['src'])
结果:
python1
python2
python3
'''
有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。
'''
分析+代码:
list0 = [11,22,33,44,55,66,77,88,99,90]
# 分析:
# 1.建立两个空的列表
list1 = [] # 大于66,key1
list2 = [] # 小于66,key2
# 2.建立一个空的字典
dict1 = {
}
# 3.通过 for in 遍历list0,通过条件判断语句判断
for i in list0:
if i < 66 :
list2.append(i) # list.append()向列表最后添加一个元素
elif i == 66:
continue
else:
list1.append(i)
# setdefault(key, default):向字典中添加key:value
dict1.setdefault('key2',list2)
dict1.setdefault('key1',list1)
print(dict1)
结果:
{
'key1': [77, 88, 99, 90], 'key2': [11, 22, 33, 44, 55]}