目录

  • 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}
"""