0%

解构

我们刚刚提到了字典的 .items() 方法会返回键值对元组的键值对元组列表:

1
2
dic = {'key': 1, 'dsb': 'alex'}
print(dic.items())

输出的内容为:

1
dict_items([('key', 1), ('dsb', 'alex')])

我们得到的是一个键值对列表,每个键值对以元组的形式存在。

如果现在,我们需要提取其中的每个元素,可以这样操作:

1
2
3
4
5
6
dic = {'key': 1, 'dsb': 'alex'}
lst = list(dic.items())
print(lst[0][0])
print(lst[0][1])
print(lst[1][0])
print(lst[1][1])

虽然能够实现,但是十分繁琐,这就需要用到结构的方法。

结构的基本样式是这样的:

1
2
3
a, b = (10, 20)
print(a)
print(b)

可以看出,1020 的值分别被赋给了 ab。这种将等号右面的数据分别赋值给等号前面的变量的方法,就是解构。

在看下面的例子:

1
2
3
a, b = '你好'
print(a)
print(b)

a 获取到了 b 获取到了 。也就是说,结构不仅适用于元组,也适用于字符串。事实上,只要是可迭代的对象,都可以用来解构:

1
2
3
4
5
6
7
8
a,b,c = [10,20,30]
print(a)
print(b)
print(c)

a,b = {"key":1,"key2":2}
print(a)
print(b)

需要注意的是,字典在进行迭代操作时,只会返回键,而不会返回值。

结构时,等式左边的变量数要和右边的元素数目相等,否则就会报错。

如果想要使用少数的变量来接收更多的元素,就需要使用 * 来将最后面的多个元素进行 聚合

1
2
3
4
a, b, *c = (1, 2, 3, 4, 5, 6)
print(a)
print(b)
print(c)

输出的结果是:

1
2
3
1
2
[3, 4, 5, 6]

3456 被统一 打包 给了 c打包 后的数据以 列表 的形式储存。

返回前面字典的 .items() 方法返回值的使用上,如果用结构的方法,我们可以很容易地打印出键值对的内容来:

1
2
3
dic = {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4}
for k, v in dic.items():
print(k, v)

输出的内容为:

1
2
3
4
key1 1
key2 2
key3 3
key4 4