目录
- 1、get() 方法
- 1.1 get() 有两种用法
- 1.2 必须使用 get() 获取字典 value 值的情况
- 2、items() 方法
- 3、sorted() 方法(使用lambda表达式)
- 3.1 对list排序
- 3.2 对dict单层排序(只按照key或value排序)
- 3.3 对dict双层排序(key和value都需要排序)
- 4、update() 方法
1、get() 方法
1.1 get() 有两种用法
dict_a.get(key):返回键为key对于的value值,如果key不存在,则返回None
dict_a.get(key,defaultValue):返回键为key对于的value值,如果key不存在,则返回defaultValue,一般设置 defaultValue=0
示例:
# 分数及该分数对应的人数
scores = {73: 2, 78: 1, 82: 3, 92: 2}
print(scores.get(80)) # None
scores[60] = scores.get(60, 0)
print(scores) # {73: 2, 78: 1, 82: 3, 92: 2, 60: 0}
scores[78] = scores.get(78, 0) +1
print(scores) # {73: 2, 78: 2, 82: 3, 92: 2, 60: 0}
1.2 必须使用 get() 获取字典 value 值的情况
在链表中:
class Node:
def __init__(self, x: int, next: 'Node' = None):
self.val = int(x)
self.next = next
如果我们建立了一个字典 dic [node] = node,那么只能用 dic.get[node.next, None] 来获得 node.next 对应的 value,而不能使用 dic[node.next];因为可能出现 node.next = None 的情况,此时 dic[node.next] 就会报错;而使用 dic.get[node.next, None] 则会返回 node.next 或 None
2、items() 方法
dict.items() 返回(键-值)元组组成的列表,可以用len(dict.items())获取其长度。
示例:
scores = {73: 2, 78: 1, 82: 3, 92: 2}
print(scores.items())
for score, num in scores.items():
print(f"{score}: {num}")
# output:
dict_items([(73, 2), (78, 1), (82, 3), (92, 2)])
73: 2
78: 1
82: 3
92: 2
3、sorted() 方法(使用lambda表达式)
sorted() 方法并不是dict的专属方法,所有可迭代的对象都可以使用,具体介绍可见 Python3 sorted() 函数
这里想说的是使用lambda表达式的sorted() 方法。
3.1 对list排序
>>> example = [5, 0, 6, 1, 2, 7, 3, 4]
>>> result = sorted(example, key=lambda x: x*-1)
>>> print(result)
[7, 6, 5, 4, 3, 2, 1, 0]
这里使用 lambda表达式作为 sorted() 方法的key参数,key=lambda x: x*-1 可以理解为参数x=example,对-x进行默认的升序排序,那么就是对x进行降序排序。
3.2 对dict单层排序(只按照key或value排序)
如果我们想按照分数由高到低字典score进行排序:
scores = {78: 4, 65: 1, 92: 3, 80: 2}
scores_list = sorted(scores.items(), key=lambda x: -x[0])
print(scores_list)
for score, num in scores_list:
print(f"{score}: {num}")
# output:
[(92, 3), (80, 2), (78, 4), (65, 1)]
92: 3
80: 2
78: 4
65: 1
这里的 key=lambda x: -x[0] 表示参数 x=scores.items(),根据-x[0]即x中的第一维(score)进行升序排序,也就是根据 x[0] 对x 进行降序排序。
3.3 对dict双层排序(key和value都需要排序)
接着上面的例子,如果我们需要对key和value同时进行排序怎么办呢?比如我们想要先按照分数出现的次数num进行降序排序,然后将相同num的score也进行降序排序,效果如下:
[(88, 4), (82, 4), (78, 4), (92, 3), (85, 3), (73, 3), (94, 2), (80, 2), (89, 1), (65, 1), (55, 1), (38, 1)]
88: 4
82: 4
78: 4
92: 3
85: 3
73: 3
94: 2
80: 2
89: 1
65: 1
55: 1
38: 1
代码如下:
# key和value均乱序的字典
scores = {78: 4, 65: 1, 92: 3, 80: 2, 55: 1, 38: 1, 73: 3, 94: 2, 82: 4, 85: 3, 88: 4, 89: 1}
scores_list = sorted(scores.items(), key=lambda x: (-x[1], -x[0]))
print(scores_list)
for score, num in scores_list:
print(f"{score}: {num}")
这里使用的lambda表达式 key=lambda x: (-x[1], -x[0]) 有两个返回值,-x[1] 表示对 x[1] 即 num进行降序排序,-x[0] 表示对 x[0] 即 score进行降序排序。
需要注意的是 -x[1]和 -x[0] 的顺序不能反,-x[1] 在前表示先根据 -x[1] 进行一次排序;再根据 -x[0] 对一次排序后的结果进行二次排序。
4、update() 方法
Python 字典(Dictionary) update() 函数把字典 dict2 的键/值对更新到 dict 里。
update()方法语法:
dict.update(dict2)
代码示例:
defaults = dict(
epochs=10,
batch_size=1,
lr=0.001,
log_interval=10
)
model_defaults=dict(
epochs=50,
batch_size=8,
image_size=224,
dropout=0.1,
)
if __name__ == '__main__':
print(defaults)
defaults.update(model_defaults)
print(defaults)
"""
output:
{'epochs': 10, 'batch_size': 1, 'lr': 0.001, 'log_interval': 10}
{'epochs': 50, 'batch_size': 8, 'lr': 0.001, 'log_interval': 10, 'image_size': 224, 'dropout': 0.1}
"""