Python 当dict中的值是一个列表时,如何对dict进行这样的拆分?
我有一个dict,其中key是string,value是一个包含一些数字的列表,比如代码中的d。 我想返回一个列表,其中每个元素都是一个dict,包含输入dict中的所有键,并按递增顺序包含值,例如result in code。 假设我们不知道列表中有多少元素(代码中可能不是3或4),但元素的数量是相同的 e、 g.1:Python 当dict中的值是一个列表时,如何对dict进行这样的拆分?,python,python-3.x,Python,Python 3.x,我有一个dict,其中key是string,value是一个包含一些数字的列表,比如代码中的d。 我想返回一个列表,其中每个元素都是一个dict,包含输入dict中的所有键,并按递增顺序包含值,例如result in code。 假设我们不知道列表中有多少元素(代码中可能不是3或4),但元素的数量是相同的 e、 g.1: d={'1':[11,12,13],'2':[21,22,23],'3':[31,32,33]} # ??? 结果=[{'1':11,'2':21,'3':31}, {'1':
d={'1':[11,12,13],'2':[21,22,23],'3':[31,32,33]}
# ???
结果=[{'1':11,'2':21,'3':31},
{'1': 12, '2': 22, '3': 23},
{'1': 13, '2': 23, '3': 33}]
e、 g.2:
d={'1':[11,12,13,14],'2':[21,22,23,24],'3':[31,32,33,34]}
# ???
结果=[{'1':11,'2':21,'3':31},
{'1': 12, '2': 22, '3': 23},
{'1': 13, '2': 23, '3': 33},
{'1': 14, '2': 24, '3': 34}, ]
zip
所有值都列在一起,然后用键将每个结果值的元组压缩成新的dict
s:
result = [dict(zip(d, vs)) for vs in zip(*d.values())]
这是因为dict
的迭代顺序与其值的迭代顺序一致(它在3.6+中的插入顺序是一致的,但对于所有版本的给定Python运行,它是一致的);“每个循环”zip
中d
中的键将按照前面zip
中拉取值的相同顺序进行迭代
这假设“增加顺序”的意思是“保留输入的顺序”;如果不是这样,则需要明智地使用内置的排序。zip
将所有值列表放在一起,然后用键将每个结果值的元组压缩成新的dict
s:
result = [dict(zip(d, vs)) for vs in zip(*d.values())]
这是因为dict
的迭代顺序与其值的迭代顺序一致(它在3.6+中的插入顺序是一致的,但对于所有版本的给定Python运行,它是一致的);“每个循环”zip
中d
中的键将按照前面zip
中拉取值的相同顺序进行迭代
这假设“增加顺序”的意思是“保留输入的顺序”;如果不是这样,则需要明智地使用内置的排序的。假设您的值列表已排序,以下代码可以很好地获得所需的输出
def answer(testdict):
result = []
lengths = [len(v) for v in testdict.values()]
length = lengths[0]
for i in range(length):
newdict = {}
for j in testdict:
newdict[j] = testdict[j][i]
result.append(newdict)
print(result)
但是,如果值列表未排序,请先尝试使用排序的。假设值列表已排序,以下代码可以很好地获得所需的输出
def answer(testdict):
result = []
lengths = [len(v) for v in testdict.values()]
length = lengths[0]
for i in range(length):
newdict = {}
for j in testdict:
newdict[j] = testdict[j][i]
result.append(newdict)
print(result)
但是,如果值列表未排序,请先尝试使用sorted
。您尝试过什么?原始目录中的列表是否保证按递增顺序排列?(因为你没有说它们是,但你的两个例子都尊重这个前提条件。)编辑:“增加”意味着保持列表中的原始顺序,而不是数字增加。你尝试过什么?原始目录中的列表是否保证按递增顺序排列?(因为你没有说它们是,但你的两个例子都尊重这个前提条件。)编辑:“增加”的意思是保持列表中的原始顺序,而不是数字增加。非常感谢!这正是我需要的!谢谢!这正是我需要的!我更喜欢使用无循环实现,但仍然非常感谢。我更喜欢使用无循环实现,但仍然非常感谢。