13、dict
dict很像js里面的object(对象)。廖雪峰说像其他语言里的Map,但我觉得还是有所不同,至少和js里不同。
理由如下:
【1】不是Map,如果是Map,那么key应该可以用list(数组)或者其他的。但至少不能用数组,会报错TypeError: unhashable type: 'list'
bar = []
foo = {bar: 1}
print(foo[bar])
# Traceback (most recent call last):
# File "D:/study notes/Python/笔记/test.py", line 2, in <module>
# foo = {bar: 1}
# TypeError: unhashable type: 'list'
【2】和js里对象的使用方法也有区别。比较典型的就是,如果key是字符串,那么必须用引号将key包裹起来,而不能直接使用字符串。避免和变量混淆
foo = {'a': 1}
print(foo['a'])
# 1
如以上代码,如果写成foo = {a: 1}
那就会抛错NameError: name 'a' is not defined
。
原因是:将a认为是变量名,而不是字符串
除了字符串外,key也可以用数字,True/False,None。
【3】但和Map有所相像,例如内置了get()
方法
dict.get(key, defaultValue)
简单来说,就是调用dict的get方法,去尝试获取参数一作为key的value。
如果获取失败,并且没有参数二,那么返回None
,否则返回预置的参数二。
foo = {}
print(foo.get('a')) # None
print(foo.get('a', 'default')) # default
可以修改默认的值,方法如下:
dict.setdefault(key, defaultValue)
假如在取值的时候,如果本身没有值,那么会获取通过这个设置的默认值(即参数二)。并且优先级高于dict.get()
的参数二
foo = {}
foo.setdefault('b', 2)
print(foo.get('b', 3)) # 2
print(foo['b']) # 2
print('b' in foo) # True
【4】最常规取值方式:
通过中括号内放置变量名或者字符串的方法,说起来很复杂,实际上就是如以下代码这么简单的办法。
但缺点是如果找不到,会抛出异常
foo = {'a': 1}
print(foo['a']) # 1
这种方式的好处是可以直接用这个来进行赋值。
如代码:
foo = {}
foo['b'] = 1
print(foo['b']) # 1
【5】查看某个dict是否有某个key的值:
key in dict
如果有,则返回True,没有就返回False
foo = {'a': 1}
print('a' in foo) # True
print('b' in foo) # False
14、set
是一种元素的集合,并且同一个集合里,元素是不重复的。类似js里的set结构。
具有以下特点:
- 互不相同;
- 元素不能是可变对象。即可以是数字、字符串、
False
(但不能是True
)、None
、tuple
(不可变数组)。不能是dict或list(但js里是可以的)。
声明时直接添加元素:
以数组的形式作为参数,并且参数可选。
foo = set([element1, element2, …])
即放在list里作为set的参数,示例代码如下:
foo = set([1, 'a', False, None, (2, 3)])
print(foo) # {False, 1, None, (2, 3), 'a'}
添加新元素
foo.add(element)
一次只能添加一个,并且不能add
连写。返回值是None
添加类型错误的变量会报错,如果是重复的变量不会添加进去。
示例:
foo = set()
foo.add(1)
print(foo) # 1
foo.add(1)
print(foo) # 1
删除元素:
foo.remove(element)
从set里移除指定元素,返回值是None。
- 如果该元素存在,则移除;
- 该元素不存在,则报错;
foo = set([1])
print(foo) # {1}
foo.remove(1)
foo = set()
foo.remove(1)
# Traceback (most recent call last):
# File "D:/study notes/Python/笔记/test.py", line 2, in <module>
# foo.remove(1)
# KeyError: 1
获取两个set的交集
foo & bar
交集是啥不懂的话我就很尴尬了,就是指两个集合里都有的元素。
返回值是一个新的set。
foo = set([1, 2, 3])
bar = set([2, 3, 4])
print(foo & bar) # {2, 3}
获取两个set的并集
foo | bar
并集就是只要某个元素在两个set中的至少一个里面存在,那么他就在并集中。
返回值是一个新的set。
foo = set([1, 2, 3])
bar = set([2, 3, 4])
print(foo | bar) # {1, 2, 3, 4}
获取set元素个数
len(set)
返回值是数字。
foo = set([1, 2, 3])
print(len(foo)) # 3