进近1(无
方法2(使用
我正在尝试转换
data_table = {"Red":[1,2,3], "Blue":[4,5,6]}
至
data_table = [ {"Red": 1, "Blue": 4 }, {"Red": 2, "Blue": 5}, {"Red": 3, "Blue": 6}]
一种可能的方法是使用熊猫数据帧。在某些情况下,我们的字典里可能有100多个关键字
import pandas as pd
df = pd.DataFrame(data_table, index=['row1', 'row2', 'row3'])
print(df.to_dict('records'))
我真正想知道的是data_table
中的键是否有不相等的值。在下面的例子中,"黑色"在列表中有2个值,而字典中的所有其他键都有3个与之相关的值。
data_new = {'Red': [1,2,3], 'Blue': [4,5,6], 'Green': [7,8,9], 'Black': [0,10]}
至
data_new = [{'Red': 1, 'Blue':4,'Green':7, 'Black':0}, {'Red': 2, 'Blue':5,'Green': 8,'Black': 10}, {'Red': 3, 'Blue': 6, 'Green':9}]
Pandas dataFrame方法失败了,因为它不能广播。
任何可能的方法都是有益的。
进近1(无pandas
(
我们可以使用zip_longest
从itertools
压缩字典中的值,然后在列表理解中迭代压缩的值,并为每个压缩的值创建字典理解中的记录
from itertools import zip_longest
[{k:v for k, v in zip(data_new.keys(), vals) if v is not None}
for vals in zip_longest(*data_new.values())]
方法2(使用pandas
(
我们可以从给定的字典中创建一个新的数据帧,其方向设置为索引,然后将数据帧堆叠为整形,然后在级别=1上进行分组,并将每个数据帧映射到列表理解中的dict
df = pd.DataFrame.from_dict(data_new, 'index').stack().astype(int)
i = df.index.get_level_values(1)
[dict(g) for _, g in df.droplevel(1).groupby(i)]
结果
[{'Red': 1, 'Blue': 4, 'Green': 7, 'Black': 0},
{'Red': 2, 'Blue': 5, 'Green': 8, 'Black': 10},
{'Red': 3, 'Blue': 6, 'Green': 9}]
您可以使用列表理解
data_table = {"Red":[1,2,3], "Blue":[4,5,6]}
new = [{'Red':r,'Blue':b} for r,b in zip(data_table['Red'],data_table['Blue'])]
输出
[{'Red': 1, 'Blue': 4}, {'Red': 2, 'Blue': 5}, {'Red': 3, 'Blue': 6}]