在Python中迭代嵌套有序词典,然后将密钥(或值)保存到Pandas DataFrame



我试图在python中迭代嵌套有序的词典。我知道我可以做这样的事情:

food = OrderedDict([('Fruits', OrderedDict([('Apple', 50), ('Banana', 100), ('Pear', 200)])), 
                    ('Vegetables', OrderedDict([('Carrot', 10), ('Broccoli', 5), ('Corn', 40)]))])
for value in food.itervalues():
    for key in value.iterkeys():
        print key

使用嵌套的循环获取键(或值)。但是,我该如何一行进行操作?我试图将字符串键(即水果名)保存到pandas dataframe(不使用数字)。这是我的尝试:

food_df = pd.DataFrame({'Food': key for key in value.iterkeys() for value in food.itervalues()})

引起错误:

File "C:Python27libsite-packagespandascoreframe.py", line 397, in __init__
    mgr = self._init_dict(data, index, columns, dtype=dtype)
File "C:Python27libsite-packagespandascoreframe.py", line 528, in _init_dict
    dtype=dtype)
File "C:Python27libsite-packagespandascoreframe.py", line 5670, in _arrays_to_mgr
    index = extract_index(arrays)
File "C:Python27libsite-packagespandascoreframe.py", line 5708, in extract_index
    raise ValueError('If using all scalar values, you must must pass'
    ValueError: If using all scalar values, you must must pass an index

有什么想法吗?谢谢!

[item for sublist in map(lambda a: a.keys(), food.itervalues()) for item in sublist]

这返回

['Apple', 'Banana', 'Pear', 'Carrot', 'Broccoli', 'Corn']

在您的情况下。

然后您可以照常创建一个数据框。

food_pd = pd.DataFrame([item for sublist in map(lambda a: a.keys(), food.itervalues()) for item in sublist], columns=["Food"])

相关内容

最新更新