zip() and zip(*) seem to give similar results
本问题已经有最佳答案,请猛点这里访问。
我试图理解
据我所知,
1 2 3 4 5 6 7 8 9 10 11 12 13 | dict_list = {'First Name': ['Tom', 'Ann', 'Ben'], 'Last Name': ['Haverford', 'Perkins', 'Wyatt'], 'Age': [33, 42, 44], 'Occupation': ['Administrator', 'Nurse', 'Auditor']} for first_name, last_name, age, occupation in zip(dict_list['First Name'], dict_list['Last Name'], dict_list['Age'], dict_list['Occupation']): print(first_name, last_name, age, occupation) #result Tom Haverford 33 Administrator Ann Perkins 42 Nurse Ben Wyatt 44 Auditor |
那么,为什么在我看来,有时候,zip(*)的行为是这样的呢?例如:
1 2 3 4 5 6 7 | for t in (zip(*dict_list.values())): print(t) #result ('Tom', 'Haverford', 33, 'Administrator') ('Ann', 'Perkins', 42, 'Nurse') ('Ben', 'Wyatt', 44, 'Auditor') |
由于我的
在这种情况下,
1 2 | >>> dict_list.values() [['Tom', 'Ann', 'Ben'], ['Haverford', 'Perkins', 'Wyatt'], [33, 42, 44], ['Administrator', 'Nurse', 'Auditor']] |
这将返回包含四个子列表的列表。
1 | zip(*dict_list.values()) |
这会解包该列表,并将每个元素作为单独的参数传递给
将它与您编写的第一个片段进行比较,后者将
1 | zip(dict_list['First Name'], dict_list['Last Name'], dict_list['Age'], dict_list['Occupation']) |
他们两个最终都将相同的东西传递给了
如果要将其与不带
1 | zip(dict_list.values()) |
现在有一个区别:
1 2 3 4 | >>> zip(*dict_list.values()) [('Haverford', 'Tom', 33, 'Administrator'), ('Perkins', 'Ann', 42, 'Nurse'), ('Wyatt', 'Ben', 44, 'Auditor')] >>> zip(dict_list.values()) [(['Haverford', 'Perkins', 'Wyatt'],), (['Tom', 'Ann', 'Ben'],), ([33, 42, 44],), (['Administrator', 'Nurse', 'Auditor'],)] |