如何在python中"flatten"字典列表



我有一个字典列表,看起来像这样:

test_dict = [{'id': 0, 'name': ['Jim'], 'lastname': ['kkk']}, {'id': 1, 'name': ['John'], 'lastname': ['lll']}]
test_dict

[{'id': 0, 'name': ['Jim'], 'lastname': ['kkk']},
{'id': 1, 'name': ['John'], 'lastname': ['lll']}]

我想创建另一个字典,它将作为键,test_dictids。

我正在寻找的输出,看起来像这样:

test_dict_f = {'0': {'name': ['Jim'], 'lastname': ['kkk']}, 
'1': {'name': ['John'], 'lastname': ['lll']}}
test_dict_f
{'0': {'name': ['Jim'], 'lastname': ['kkk']},
'1': {'name': ['John'], 'lastname': ['lll']}}

有什么好主意吗?

试着写一行:

result = {str(i["id"]): {"name": i["name"], "lastname": i["lastname"]} for i in test_dict}

结果将是:

{'0': {'name': ['Jim'], 'lastname': ['kkk']},
'1': {'name': ['John'], 'lastname': ['lll']}}

这里有另一种方法,它不依赖于除'id'以外的任何键的知识。注意,这是破坏性的:

test_dict = [{'id': 0, 'name': ['Jim'], 'lastname': ['kkk']}, {'id': 1, 'name': ['John'], 'lastname': ['lll']}]
test_dict_f = {}
for d in test_dict:
id_ = d.pop('id')
test_dict_f[str(id_)] = d
print(test_dict_f)

输出:

{'0': {'name': ['Jim'], 'lastname': ['kkk']}, '1': {'name': ['John'], 'lastname': ['lll']}}

test_dict = [{'id': 0, 'name': ['Jim'], 'lastname': ['kkk']}, {'id': 1, 'name': ['John'], 'lastname': ['lll']}]

pp({i["id"]: {k:v for k,v in i.items() if k!="id"} for i in test_dict})
or event much funnier: 
pp({i["id"]: i|{"id":i["id"]} for i in test_dict})
{0: {'name': ['Jim'], 'lastname': ['kkk']},
1: {'name': ['John'], 'lastname': ['lll']}}

相关内容

  • 没有找到相关文章

最新更新