最近重温Python基础语法,一道练习题巩固下列表、字典、循环。
给定下面两个列表 attributes 和 values,要求针对 values 中每一组子列表 value,输出其和 attributes 中的键对应后的字典,最后返回字典组成的列表,请分别用一行和多行条件循环语句,来实现这个功能
attributes = ['name', 'dob', 'gender'] values = [['jason', '2000-01-01', 'male'], ['mike', '1999-01-01', 'male'], ['nancy', '2001-02-01', 'female'] ] # expected output: [{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}, {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}, {'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
使用 enumerate
和 for
循环(多行)
使用 enumerate
来迭代属性名列表,同时索引值列表。
result = [] for value in values: dict1 = {} # 创建一个空字典 for index, item in enumerate(attributes): dict1[item] = value[index] # 将属性名作为键,对应的值作为值 result.append(dict1) # 将生成的字典添加到结果列表中 print("result1", result)
反向使用 enumerate
(多行)
类似于第一种,但在值列表上使用 enumerate
,然后从属性列表中索引。
result2 = [] for value in values: dict2 = {} # 创建一个空字典 for index, item in enumerate(value): dict2[attributes[index]] = item # 使用值的索引从属性列表中获取对应的键 result2.append(dict2) # 将生成的字典添加到结果列表中 print("result2", result2)
使用 zip
函数和列表推导式(一行)
result3 = [dict(zip(attributes, value)) for value in values] print("result3", result3)
zip
函数
zip
函数在 Python 中用于将多个迭代器(如列表、元组)的元素打包成一个个元组,然后返回由这些元组组成的一个迭代器。
使用 zip
时,它会从每个提供的迭代器中依次取出一个元素,将它们组合成一个新的元组,并将这个新的元组作为结果的一部分返回。当最短的输入迭代器被耗尽时,zip
函数会停止生成更多的元组。
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] # 使用zip将两个列表的元素配对 zipped = list(zip(list1, list2)) # 输出:[(1, 'a'), (2, 'b'), (3, 'c')] # 我们也可以通过解压缩的方式还原列表 numbers, letters = zip(*zipped) print(list(numbers)) # 输出:[1, 2, 3] print(list(letters)) # 输出:['a', 'b', 'c']
zip
函数用于将 attributes
列表(包含键的列表)和 values
列表中的每个子列表(包含对应值的列表)合并,这样就可以方便地创建出每个属性和值对应的字典。