1. Python中字典是一种映射类型,key是关键字,value是对应的值
字典用{}来定义,字典由多个键和其对应的值构成。每一对键值组合称为项
2. 创建字典
dict1 = {}
dict1 = dict((('o', 10), ('w', 20), ('e', 30), ('n', 40))) # dict()函数的参数可以是一个序列,元组或列表都可以
print(dict1)
dict2 = dict([('a', 10), ('b', 20), ('c', 30)]) # dict()参数是列表
print(dict2)
dict3 = dict(a = 1, b = 2, c = 3) # 键的位置不能加引号
print(dict3)
dict4 = {}
print(dict4.fromkeys((1, 2, 3)))
3 字典赋值
dict1['w'] = 79
print(dict1)
dict5 = {}
print(dict5.fromkeys((1, 2, 3), 'number'))
dict6 = {}
print(dict6.fromkeys((1, 2, 3,), ('one', 'two', 'three'))) # fromkeys()方法不会将one,two,three分别赋值
4.字典的内置方法
在序列中一个不存在赋值会报错,在字典中,会自动创建相应的键并添加对应的值进去
fromkeys()用于创建并返回一个新的字典,见上
keys()用于以列表的形式返回字典中的键
values()以列表的形式返回字典中的值
items()返回字典中的键值对
print(dict2.keys())
print(dict2.values())
print(dict2.items())
get()访问字典项。当访问的键不存在的时候,只返回一个none,表示什么都没有找到,或可在
第二个参数设置对应的默认返回值
print(dict2.get('r'))
print(dict2.get('h', '没有'))
清空字典用clear(),
注意:用变量名赋值一个空字典的方法,a,b都指向同一个字典,通过将a重新指向一个空字典
a只是指向了一个新的空字典,原字典依然没有清空。
a = {'姓名': 'owen'}
b = a # 此时a,b都指向同一个字典
a = {} # a指向一个空字典,但是b指向的字典依然没有清空
print(a)
print(b)
c = {'姓名': 'owen'}
b = c
print(c.clear())
print(b.clear())
复制字典用copy()
copy() d,h两者地址不一样,所有两者不是指向同一个字典,如果改变字典中键对应的值,则d改变,h不变
d = {'姓名': 'owen'}
f = d
h = d.copy()
d['姓名'] = 'charlin'
print(d)
print(f)
print(h)
5.删除字典
pop()弹出指定键对应的值,popition()是弹出一个键值对
print(dict2.pop('b'))
print(dict2.popitem()) # 随机弹出
print(dict2)
6.添加字典
setdefault()在字典中存在对应键 返回其对应的值,不存在则添加
t = {1: 100, 2: 200, 3: 300}
print(t.setdefault(2))
print(t.setdefault(6))
print(t)
7.更新字典
update()
d = {1:3}
print(d)
d.update({1: 4})
print(d)
8. 收集参数
**参数 表示将参数打包成字典的形式
def test(**params):
print('有%d个参数' % len(params))
print('他们分别是:', params)
test(a = 1, b = 2, c = 3)
集合
1. 用{}括起来的,但是没有体现映射关系,集合中的元素是无序的,集合中的元素输出后都是唯一的
num1 = {}
num1 = {1, 2, 3, 4, 5}
print(num1)
2.创建集合
set1 = {}
set2 = set([1, 2, 3, 4]) # 用set()创建集合参数为列表
print(set1)
print(set2)
3.去除列表里的重复的元素
list1 = [1, 2, 3, 4, 4, 2, 7, 8, 9]
list1 = list(set(list1)) # set()创建集合,集合元素是唯一的,所以可以去重,自动排序
print(list1)
4. 访问集合
因为集合中的元素是无序的,所有不能利用索引下标来进行访问,但是可以用循环迭代把集合中的元素读取出来
set2 = {1, 3, 2, 4, 5, 9, 5, 7, 6, 8} # 集合中的元素是无序,如果元素是数字,输出时自动排序,如果有字符串,输出无序
for i in set2:
print(i, end = ' ')
5. in 或者 not in 判断一个元素是否在集合里
print(0 in set2)
print(3 in set2)
print(0 not in set2)
6.不可变集合
使用frozenset()将集合不能随意删除和修改
set3 = frozenset({1, 2, 3, 4})
set3.add(8)
print(set3