Pyton中的字典和集合

一。字典

1.什么是字典

  • 问题:用列表同时保存多个意义不同的数据的时候,代码的可读性很低。
  • 解决;用字典保存多个意义不同的数据
stu = ['小明',20,'男','13535535', '17771837', 80, 170, 80]

  • 字典是容器型数据类型的数据,将{}作为容器的标志,里面多个元素用逗号隔开(其中元素必须是键值对)
    : {键1:值1, 键2:值2, 键3:值3, …}
  • 字典是可变(支持增删改);字典是无序(不支持下标操作)
  • 字典的元素:键是不可变的,唯一的,用来区分不同数据的;值可以是任何类型的数据,并且可以重复

2.元素的增删改查

  • 1)查 - 获取字典的值

  • a .获取单个值

  • 1.字典[key] - 获取字典中指定key对应的值(如果key不存在会报错)
    2.字典.get(key) - 获取字典中指定key对应的值(如果key不存在不会报错,返回None)
    3.字典.get(key,默认值)- 获取字典中指定key对应的值(如果key不存在不会报错,返回默认值)

  • b.遍历字典
    方式一:(推荐使用)
    for 变量 in 字典:
    循环体(变量在循环体中得到的是字典的key)
    方法二:
    for 变量1,变量2 in 字典.items():
    循环体(循环体中变量1取到的所有的键,变量2取到的是所有键对应的值)

for x in movie1:
   print(x, movie1[x])
print(movie1.items())
for x, y in movie1.items():
   print(x, y)
  • 2 ) 增/改 - 添加键值对/修改键值对的值
  • 字典[key] = 值 - 当key不存在就是添加键值对;当key存在的时候就是修改key对应的值
subject = {
   'name': 'python',
   'score': 3,
   'class_hour': 20,
   'direction' : ['数据分析','web后端', '爬虫','自动测试','自动化运维' ]
}
print(subject)
subject['teacher'] = '毓婷'
print(subject)
subject['score'] = 4
print(subject)
  • 3)删
    del 字典[key] - 删除字典指定key对应的键值对
    字典.pop(key) - 取出字典中指定key对应的值
del subject['class_hour']
print(subject)

del_item = subject.pop('direction')
print(subject)
print(del_item)

3.字典的应用

4.字典相关的操作和方法。

操作

  • 1)字典不支持加法,乘法和比较大小的运算。
  • 2)判断是否相等
  • == 判断两个数据是否相等。
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})  # True
  • is - 判断两个数据的地址是否相等
a = {'a': 10}
b ={'a': 10}
c = a
print(a == b)  # True
print(a is b)  # False
print(a is c)  # True
  • 3)in 和 not in
  • key in 字典 - 判断字典中是否有指定的key
dict1 ={'a': 10, 'b': 20, 'c': 30}
print(10 in dict1)  # False
print('b' in dict1)  # True
  • 4)相关函数:len、dict
  • len(字典) - 获取字典中键值对的个数
dict1 ={'a': 10, 'b': 20, 'c': 30}
print(len(dict1))  # 3
  • dict(数据) - 将其他数据转换成字典(数据的要求:1.序列 2.序列中的元素还是序列, 3.内部的序列有且只有两个元素,第一个元素不可变。)
list1 = ['ab', (10, 20), ['name', '张三']]
print(dict(list1))  # {'a': 'b' , 10 : 20, 'name :'张三’}
  • 5)将字典转换成其他数据
  • 将字典转换成列表/元组 - 将字典的key作为列表/元组的元素
stu = {'name': '小明', 'age': 18, 'score': 100}
print(list(stu))  # ['name' ,'age' ,'score']
print(tuple(stu))  # ('name ,'age' ,'score')
  • 2)将字典转换成字符串
print(str(stu))
  • 3)将字典转成布尔
print(bool({}))  # False
print(bool(stu))  # True

相关方法

  • 1)字典.clear() - 清空
stu = {'name': '小明', 'age': 18, 'score': 100}
stu.clear()
print(stu)   # {}

  • 2)字典.copy() - 复制,和前面列表切片一样的效果,
  • 3)dict.fromkeys(序列,默认值=None) -
    :创建一个新的字典,序列中所有的元素会作为新字典的key,默认值是所有key对应的值。
new_dict = dict.fromkeys('abc')
print(new_dict)  # {'a': None, 'b': None, 'c': None}
new_dict = dict.fromkeys(['name', 'age', 'sex'], 0)
print(new_dict)  # {'name': 0, 'age': 0, 'sex': 0}

  • 4)字典.items()、字典.keys()、字典.values()
stu = {'name': '小明', 'age': 18, 'score': 100}
print(stu.items())  # dict_items([('name', '小明'), ('age', 18), ('score', 100)])
print(stu.keys())   # dict_keys(['name', 'age', 'score'])
print(stu.values())  # dict_values(['小明', 18, 100])
  • 5)字典.setdefault(key, value) - 在字典中添加键值对(单纯的添加键值对,不会修改)
stu = {'name': '小明', 'age': 18, 'score': 100}
stu.setdefault('weight', 50)
print(stu)   # {'name': '小明', 'age': 18, 'score': 100,
 'weight': 50}
stu.setdefault('name', '小花')
print(stu)  # {'name': '小明', 'age': 18, 'score': 100, 
'weight': 50}
  • 6)字典1.update(字典2) - 将字典2中所有的键值对全部添加到字典1中
stu.update({'a': 10, 'b': 20})
print(stu)  # {'name': '小明', 'age': 18, 'score': 100, 
'weight': 50, 'a': 10, 'b': 20}

猜你喜欢

转载自blog.csdn.net/xinxing66/article/details/107642941