Python技巧|二

文摘   2023-04-11 20:44   河南  

假设有一个这样的场景,我们有两个可迭代对象,分别为

[1,2,3]

[4,5,6]

我们想把1和4,2和5,3和6合起来,就像这样

(1,4)

(2,5)

(3,6)

借用zip()函数,我们可以很容易解决这个问题,就像这样

>>> a=[1,2,3]>>> b=[4,5,6]>>> c=list(zip(a,b))>>> c[(1, 4), (2, 5), (3, 6)]

当然,其实由c我们也可复原a,b

>>> r1,r2=zip(*c)>>> r1(1, 2, 3)>>> r2(4, 5, 6)>>> a1=list(r1)>>> a1[1, 2, 3]>>> b1=list(r2)>>> b1[4, 5, 6]

当然,这种情况非常简单,下面来看一个复杂的例子,这样更能看到zip函数的强大。

假设我们有这样一些数据:

column_names=['name','salary','iob']

rows=[('jon snow',9900,'CEO'),

          ('bob',10000,'manager'),

           ('alice',9800,'scientist')]

但是我们想得到一个字典格式的数据,这样在我们访问时,可以更清晰知道数据的含义。

db=[dict(zip(column_names,row)) for row in rows]>>> column_names=['name','salary','job']>>> rows=[('jon snow',9900,'CEO'),      ('bob',10000,'manager'),      ('alice',9800,'scientist')]>>> db=[dict(zip(column_names,row)) for row in rows]>>> db[{'name': 'jon snow', 'salary': 9900, 'job': 'CEO'}, {'name': 'bob', 'salary': 10000, 'job': 'manager'}, {'name': 'alice', 'salary': 9800, 'job': 'scientist'}]

也许到了这里,你有些疑惑,为什么仅仅在zip()函数外加了个dict(),也就是字典函数,结果就真的成了字典,并且结果就是我们希望的格式。

这里的数据究竟是如何组织的?

事实上,在我们将['name','salary','job'],('jon snow',9900,'CEO')传入zip函数后,数据的格式被转换为这样:[('name','jon snow'),('salary',9900),('job','CEO')],然后再使用转换函数dict(),就成功得到了字典格式的结果。


当然,虽然,我们传入的参数一个是列表,一个是元组,但并没有什么问题,因为zip()函数要求输入对象是可迭代对象就行。









点击"在看"了解更多精彩内容



math and code
计算机专业研究生在读,拥有深厚的计算机科学和数学背景,对编程、算法、数据结构、深度学习等领域都有着深入的了解和实践经验。对编程语言的掌握熟练而全面,无论是主流的Python、Java,还是强大的C++、Go,都能轻松驾驭。