Python 在列表中生成多个词典的有效方法
我有一个与dict格式如下Python 在列表中生成多个词典的有效方法,python,dictionary,Python,Dictionary,我有一个与dict格式如下 dic = { 'x':[1, 2, 3, 4], 'y':[2, 4, 5, 6], 'z':['a', 'b', 'c', 'g'], 'a':['d', 'e', 'f', 'a'], } 我想把它转换成下面的格式 lst_wth_dic = [ {'x':1, 'y':2, 'z': 'a', 'a':'d'},
dic = {
'x':[1, 2, 3, 4],
'y':[2, 4, 5, 6],
'z':['a', 'b', 'c', 'g'],
'a':['d', 'e', 'f', 'a'],
}
我想把它转换成下面的格式
lst_wth_dic = [
{'x':1, 'y':2, 'z': 'a', 'a':'d'},
{'x':2, 'y':4, 'z':'b', 'a':'e'},
{'x':3, 'y':5, 'z':'c', 'a': 'f'},
{'x':4, 'y':6, 'z':'g', 'a': 'a'}
]
到目前为止我试过的是这个
import copy
lst_wth_dic = []
b = {}
for key, val in dic.items():
for item in val:
b[key] = item
c = copy.copy(b)
lst_wth_dic.append(c)
它没有达到我所需的预期输出。您可以执行以下操作:
d = {
'x':[1, 2, 3, 4],
'y':[2, 4, 5, 6],
'z':['a', 'b', 'c', 'g'],
'a':['d', 'e', 'f', 'a'],
}
lst_dic = [dict(zip(d.keys(), vs)) for vs in zip(*d.values())]
print(lst_dic)
输出
[{'a': 'd', 'x': 1, 'y': 2, 'z': 'a'},
{'a': 'e', 'x': 2, 'y': 4, 'z': 'b'},
{'a': 'f', 'x': 3, 'y': 5, 'z': 'c'},
{'a': 'a', 'x': 4, 'y': 6, 'z': 'g'}]
表达方式:
zip(*d.values())
创建以下iterable:
[(1, 2, 'a', 'd'), (2, 4, 'b', 'e'), (3, 5, 'c', 'f'), (4, 6, 'g', 'a')]
然后对每个元组使用d
键。对于循环,上述等效于以下:
lst_dic = []
for vs in zip(*d.values()):
lst_dic.append(dict(zip(d.keys(), vs)))
你可以做:
d = {
'x':[1, 2, 3, 4],
'y':[2, 4, 5, 6],
'z':['a', 'b', 'c', 'g'],
'a':['d', 'e', 'f', 'a'],
}
lst_dic = [dict(zip(d.keys(), vs)) for vs in zip(*d.values())]
print(lst_dic)
输出
[{'a': 'd', 'x': 1, 'y': 2, 'z': 'a'},
{'a': 'e', 'x': 2, 'y': 4, 'z': 'b'},
{'a': 'f', 'x': 3, 'y': 5, 'z': 'c'},
{'a': 'a', 'x': 4, 'y': 6, 'z': 'g'}]
表达方式:
zip(*d.values())
创建以下iterable:
[(1, 2, 'a', 'd'), (2, 4, 'b', 'e'), (3, 5, 'c', 'f'), (4, 6, 'g', 'a')]
然后对每个元组使用d
键。对于
循环,上述等效于以下:
lst_dic = []
for vs in zip(*d.values()):
lst_dic.append(dict(zip(d.keys(), vs)))
您可以在理解列表中进行听写理解:
lst_wth_dic = [{k:v[i] for k, v in dic.items()} for i in range(4)]
您可以在理解列表中进行听写理解:
lst_wth_dic = [{k:v[i] for k, v in dic.items()} for i in range(4)]
它实现了什么?什么是b
?给出a。b也是一个问题。应该改变什么?它实现了什么?什么是b
?给出a。b也是一个问题。应该改变什么?