循环在字典和集合中的应用
给定下面两个列表 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 outout:
[{‘name’: ‘jason’, ‘dob’: ‘2000-01-01’, ‘gender’: ‘male’},
{‘name’: ‘mike’, ‘dob’: ‘1999-01-01’, ‘gender’: ‘male’},
{‘name’: ‘nancy’, ‘dob’: ‘2001-02-01’, ‘gender’: ‘female’}]
源代码如下
import copy
attributes = ['name', 'dob', 'gender']
values = [
['jason', '2000-01-01', 'male'],
['mike', '1999-01-01', 'male'],
['nancy', '2001-02-01', 'female']
]
l_except = []
d = {}
for value in values:
#方法一
#for index,v in enumerate(value):
#d[attributes[index]] = v
# 方法二
d = dict(zip(attributes,value))
l_except.append(d)
#d.clear() #值得注意的是list,dict是传递引用,如果调用此句下句就会为[{},{},{}]
#可以用copy.deepcopy传递学拷贝对象l_except.append(copy.deepcopy(d))
print(l_except)
#一行版本
l_except = [{arrt: v[index] for index, arrt in enumerate(attributes)}for v in values]
print(l_except)
#or
l_except = [dict(zip(attributes,v)) for v in values]
print(l_except)