我想将字典转换为元组列表,但“按行”进行:第一个元组应包含第一个值,第二个元组应包含第二个值,依此类推。
我有一些工作代码,但我想知道是否有更惯用的方法,因为我的解决方案似乎太冗长了。
data = {
'a': [1,2,3,4],
'b': [1,2,3,5],
'c': [1,2,3,6]
}
tuple_list = []
for i, x in enumerate(data['a']):
tpl = []
for key in data:
val = data[key][i]
tpl.append(val)
tuple_list.append(tuple(tpl))
输出
[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 5, 6)]
zip
并行迭代多个迭代,生成元组,每个元组都有一个项目.
print(list(zip(*data.values())))
# Equivalent to
# print(list(zip([1, 2, 3, 4], [1,2,3,5], [1, 2, 3, 6])))
您可以使用以下单行代码:
list(zip(*data.values()))
解释:
data.values()
给你一个列表字典值(在这种情况下,列表)。接下来,我们使用 *
运算符将该列表解压缩为 zip
函数的三个单独参数。 zip
将几个可迭代对象作为参数,并从每个可迭代对象的各个元素创建元组。然后我们只需要将它从 zip 对象转换为列表(如果你要做任何进一步的处理,可以将它保留为 zip 对象)。