Python 在列表中生成多个词典的有效方法

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'},

我有一个与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'}, 
               {'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也是一个问题。应该改变什么?