Update 09. 字典.md
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
|
||||
# 字典
|
||||
|
||||
## 1. 可变类型与不可变类型
|
||||
@@ -9,6 +10,8 @@
|
||||
- 麻烦方法:用 `id(X)` 函数,对 X 进行某种操作,比较操作前后的 `id`,如果不一样,则 `X` 不可变,如果一样,则 `X` 可变。
|
||||
- 便捷方法:用 `hash(X)`,只要不报错,证明 `X` 可被哈希,即不可变,反过来不可被哈希,即可变。
|
||||
|
||||
【例子】
|
||||
|
||||
```python
|
||||
i = 1
|
||||
print(id(i)) # 140732167000896
|
||||
@@ -24,6 +27,8 @@ print(id(l)) # 4300825160
|
||||
- 列表 `l` 在附加 `'Python'` 之后的 `id` 和之前一样,因此列表是可变类型。
|
||||
|
||||
|
||||
【例子】
|
||||
|
||||
```python
|
||||
print(hash('Name')) # -9215951442099718823
|
||||
|
||||
@@ -72,11 +77,11 @@ print('耐克的口号是:', dic['耐克'])
|
||||
# 耐克的口号是: Just do it
|
||||
```
|
||||
|
||||
通过字符串或数值作为`key`来创建字典。
|
||||
|
||||
注意:如果我们取的键在字典中不存在,会直接报错`KeyError`。
|
||||
|
||||
【例子】
|
||||
|
||||
【例子】通过字符串或数值作为`key`来创建字典。
|
||||
|
||||
```python
|
||||
dic1 = {1: 'one', 2: 'two', 3: 'three'}
|
||||
print(dic1) # {1: 'one', 2: 'two', 3: 'three'}
|
||||
@@ -88,6 +93,7 @@ print(dic2) # {'wheat': 101, 'corn': 67, 'rice': 35}
|
||||
print(dic2['rice']) # 35
|
||||
```
|
||||
|
||||
注意:如果我们取的键在字典中不存在,会直接报错`KeyError`。
|
||||
|
||||
【例子】通过元组作为`key`来创建字典,但一般不这样使用。
|
||||
|
||||
@@ -99,7 +105,7 @@ print(type(dic)) # <class 'dict'>
|
||||
|
||||
通过构造函数`dict`来创建字典。
|
||||
|
||||
- `dict()` -> 创建一个空的字典。
|
||||
- `dict()` 创建一个空的字典。
|
||||
|
||||
【例子】通过`key`直接把数据放入字典中,但一个`key`只能对应一个`value`,多次对一个`key`放入 `value`,后面的值会把前面的值冲掉。
|
||||
|
||||
@@ -121,7 +127,7 @@ print(dic)
|
||||
# {'a': 11, 'b': 2, 'c': 3, 'd': 4}
|
||||
```
|
||||
|
||||
- `dict(mapping)` -> new dictionary initialized from a mapping object's (key, value) pairs
|
||||
- `dict(mapping)` new dictionary initialized from a mapping object's (key, value) pairs
|
||||
|
||||
【例子】
|
||||
```python
|
||||
@@ -150,16 +156,16 @@ print(type(dic)) # <class 'dict'>
|
||||
```python
|
||||
seq = ('name', 'age', 'sex')
|
||||
dic1 = dict.fromkeys(seq)
|
||||
print("新的字典为 : %s" % str(dic1))
|
||||
# 新的字典为 : {'name': None, 'age': None, 'sex': None}
|
||||
print(dic1)
|
||||
# {'name': None, 'age': None, 'sex': None}
|
||||
|
||||
dic2 = dict.fromkeys(seq, 10)
|
||||
print("新的字典为 : %s" % str(dic2))
|
||||
# 新的字典为 : {'name': 10, 'age': 10, 'sex': 10}
|
||||
print(dic2)
|
||||
# {'name': 10, 'age': 10, 'sex': 10}
|
||||
|
||||
dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
|
||||
print("新的字典为 : %s" % str(dic3))
|
||||
# 新的字典为 : {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
|
||||
print(dic3)
|
||||
# {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
|
||||
```
|
||||
|
||||
- `dict.keys()`返回一个可迭代对象,可以使用 `list()` 来转换为列表,列表为字典中的所有键。
|
||||
@@ -177,8 +183,11 @@ print(lst) # ['Name', 'Age']
|
||||
【例子】
|
||||
```python
|
||||
dic = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'}
|
||||
print("字典所有值为 : ", list(dic.values()))
|
||||
# 字典所有值为 : [7, 'female', 'Zara']
|
||||
print(dic.values())
|
||||
# dict_values(['female', 7, 'Zara'])
|
||||
|
||||
print(list(dic.values()))
|
||||
# [7, 'female', 'Zara']
|
||||
```
|
||||
|
||||
- `dict.items()`以列表返回可遍历的 (键, 值) 元组数组。
|
||||
@@ -186,20 +195,24 @@ print("字典所有值为 : ", list(dic.values()))
|
||||
【例子】
|
||||
```python
|
||||
dic = {'Name': 'Lsgogroup', 'Age': 7}
|
||||
print("Value : %s" % dic.items())
|
||||
# Value : dict_items([('Name', 'Lsgogroup'), ('Age', 7)])
|
||||
print(dic.items())
|
||||
# dict_items([('Name', 'Lsgogroup'), ('Age', 7)])
|
||||
|
||||
print(tuple(dic.items()))
|
||||
print(tuple(dic.items()))
|
||||
# (('Name', 'Lsgogroup'), ('Age', 7))
|
||||
|
||||
print(list(dic.items()))
|
||||
# [('Name', 'Lsgogroup'), ('Age', 7)]
|
||||
```
|
||||
|
||||
- `dict.get(key, default=None)`返回指定键的值,如果值不在字典中返回默认值。
|
||||
- `dict.get(key, default=None)` 返回指定键的值,如果值不在字典中返回默认值。
|
||||
|
||||
【例子】
|
||||
```python
|
||||
dic = {'Name': 'Lsgogroup', 'Age': 27}
|
||||
print("Age 值为 : %s" % dic.get('Age')) # Age 值为 : 27
|
||||
print("Sex 值为 : %s" % dic.get('Sex', "NA")) # Sex 值为 : NA
|
||||
print(dic) # {'Name': 'Lsgogroup', 'Age': 27}
|
||||
```
|
||||
|
||||
- `dict.setdefault(key, default=None)`和`get()`方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
|
||||
@@ -209,8 +222,8 @@ print("Sex 值为 : %s" % dic.get('Sex', "NA")) # Sex 值为 : NA
|
||||
dic = {'Name': 'Lsgogroup', 'Age': 7}
|
||||
print("Age 键的值为 : %s" % dic.setdefault('Age', None)) # Age 键的值为 : 7
|
||||
print("Sex 键的值为 : %s" % dic.setdefault('Sex', None)) # Sex 键的值为 : None
|
||||
print("新字典为:", dic)
|
||||
# 新字典为: {'Age': 7, 'Name': 'Lsgogroup', 'Sex': None}
|
||||
print(dic)
|
||||
# {'Age': 7, 'Name': 'Lsgogroup', 'Sex': None}
|
||||
```
|
||||
|
||||
- `key in dict` `in` 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回`true`,否则返回`false`。而`not in`操作符刚好相反,如果键在字典 dict 里返回`false`,否则返回`true`。
|
||||
@@ -276,7 +289,8 @@ print(dic1) # {2: [1, 2]}
|
||||
dic = {'Name': 'Zara', 'Age': 7}
|
||||
print("字典长度 : %d" % len(dic)) # 字典长度 : 2
|
||||
dict.clear()
|
||||
print("字典删除后长度 : %d" % len(dic)) # 字典删除后长度 : 0
|
||||
print("字典删除后长度 : %d" % len(dic))
|
||||
# 字典删除后长度 : 0
|
||||
```
|
||||
|
||||
- `dict.copy()`返回一个字典的浅复制。
|
||||
@@ -286,8 +300,8 @@ print("字典删除后长度 : %d" % len(dic)) # 字典删除后长度 : 0
|
||||
```python
|
||||
dic1 = {'Name': 'Lsgogroup', 'Age': 7, 'Class': 'First'}
|
||||
dic2 = dic1.copy()
|
||||
print("新复制的字典为 : ", dic2)
|
||||
# 新复制的字典为 : {'Age': 7, 'Name': 'Lsgogroup', 'Class': 'First'}
|
||||
print("dic2)
|
||||
# {'Age': 7, 'Name': 'Lsgogroup', 'Class': 'First'}
|
||||
```
|
||||
【例子】直接赋值和 copy 的区别
|
||||
|
||||
@@ -296,7 +310,7 @@ dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]}
|
||||
|
||||
# 引用对象
|
||||
dic2 = dic1
|
||||
# 深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
|
||||
# 浅拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
|
||||
dic3 = dic1.copy()
|
||||
|
||||
print(id(dic1)) # 148635574728
|
||||
@@ -324,8 +338,8 @@ print(dic3) # {'user': 'runoob', 'num': [2, 3]}
|
||||
dic = {'Name': 'Lsgogroup', 'Age': 7}
|
||||
dic2 = {'Sex': 'female', 'Age': 8}
|
||||
dic.update(dic2)
|
||||
print("更新字典 dict : ", dic)
|
||||
# 更新字典 dict : {'Sex': 'female', 'Age': 8, 'Name': 'Lsgogroup'}
|
||||
print(dic)
|
||||
# {'Sex': 'female', 'Age': 8, 'Name': 'Lsgogroup'}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user