Python-对字典/嵌套字典的元组进行排序



我试图通过python手册寻找类似的问题,但在理解如何解决我的问题方面仍然存在问题。我有一个嵌套的字典,我想重新排列嵌套字典的键顺序,并按列的字母顺序排序(在这种情况下,它将按爱好排序(。

嵌套字典:(如果未禁用客户端,则禁用列为空(

client_info = {amy: {'age': '30', 'hobby': 'travel', 'status': 'relationship', 'disability': 'disabled'}
john: {'age': '20', 'hobby': 'painting', 'status': 'single', 'disability': ''}
...
}

我可以用这段代码按字母顺序对爱好进行排序,它在我的键上迭代:

with open('AllClients.csv', 'w', newline='') as file:
sorted_hobbies = sorted(client_info.items(), key=lambda x: x[1]['hobby'])

按照字母顺序对爱好进行排序后,我的嵌套词典变成了一个字典元组:

[(john, {'age': '20', 'hobby': 'painting', 'status': 'single', 'disability': ''}),
(amy, {'age': '30', 'hobby': 'travel', 'status': 'relationship', 'disability': 'disabled'})
...
]

然而,在按字母顺序对爱好进行排序后,我想进一步更改键的顺序,使单个状态列位于爱好列之前。最终,在所有更改之后,我会以以下格式将其写入csv文件

期望输出:

john,20,single,painting,
amy,30,relationship,travel,disabled

如果到目前为止我所做的事情没有意义,我深表歉意。我很难弄清楚我应该朝哪个方向去实现我需要的结果,所以我甚至很难找到我应该问的正确问题。

您的排序非常适合您的任务。您最终得到的是元组列表,因为client_info.items()是元组列表。但这不是一个问题。现在,您可以对结果列表进行迭代,并根据自己的喜好将数据写入CSV:

...
ordered_hobbies = sorted(client_info.items(), key=lambda x: x[1]['hobby'])
for name, data in ordered_hobbies:
file.write(f"{name},{data['age']},{data['status']},{data['hobby']},{data['disability']}n")

其中data将是每个客户端的字典。你可以按照你喜欢的顺序(即年龄、地位、爱好、残疾(构建CSV行

最新更新