一个嵌套字典中包含多个嵌套字典

3
感谢SO,我使用以下DataFrame创建了一个带有正确键的所需嵌套字典:
df = pd.DataFrame({'name': ['jake','martin','justin'], 'date': ['6/7/2021','1/1/2031','1/4/2011'], 'country':['Russia','USA','Australia'],
'city 1':['Moscow','New York','Sidney'], 'city 2':['St. Petersburg','Los Angeles','Brisbane'], 'kids':[5,3,1], 'Feature 1':['some','feature','here'], 'Feature 2':['some2','feature2','here2']})

看起来像这样:

   name      country   city 1    city2           kids   Feature1   Feature2   date  
0  jake      Russia    Moscow    St. Petersburg  5       some       some2     1/1/2031
1  martin    USA       New York  Los Angeles     3       feature    feature2  4/4/2021
2  justin    Australia Sidney    Brisbane        1       here       here2     2/3/2015

最终目标:

创建一个嵌套字典,如下所示:

{jake: {'name':'jake', 'Russia': {'city1':'Moscow', 'city2': 'St. Petersburg'}, '5': {'Feature1':'some', 'Feature1':'some2'}, 'date': '1/1/2031'}, martin: {}}

我的目标是在一个嵌套字典中创建嵌套字典,并尝试了不同的方法,包括使用 defaultdict,但很遗憾没有成功。

以下是我用于创建第一层嵌套的代码:

{jake: {'name':'jake', 'country':'Russia', 'city1':'Moscow', ...}}

df.set_index('name', inplace=True, drop=False)
d = df.transpose().to_dict()

我也尝试过创建一个单独的字典,然后将其附加,但没有成功。非常感谢任何帮助。

1个回答

2

如果我理解正确的话,也许可以通过迭代数据框的行并为字典设置值来解决:

for index, row in df.iterrows():
    my_dict[row['name']] = {'name': row['name'],
                            row['country']: {'city 1':row['city 1'], 'city 2':row['city 2']},
                            'kids': row['kids'],
                            'date':row['date'], 
                            'features':[row['Feature 1'], row['Feature 2']]}

my_dict

输出:

{'jake': {'Russia': {'city 1': 'Moscow', 'city 2': 'St. Petersburg'},
  'date': '6/7/2021',
  'features': ['some', 'some2'],
  'kids': 5,
  'name': 'jake'},
 'justin': {'Australia': {'city 1': 'Sidney', 'city 2': 'Brisbane'},
  'date': '1/4/2011',
  'features': ['here', 'here2'],
  'kids': 1,
  'name': 'justin'},
 'martin': {'USA': {'city 1': 'New York', 'city 2': 'Los Angeles'},
  'date': '1/1/2031',
  'features': ['feature', 'feature2'],
  'kids': 3,
  'name': 'martin'}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接