将字典列表转换为字典嵌套字典的优雅方式

7

我有一个字典列表,就像这个例子:

listofdict = [{'name': 'Foo', 'two': 'Baz', 'one': 'Bar'}, {'name': 'FooFoo', 'two': 'BazBaz', 'one': 'BarBar'}]

我知道每个字典中都存在“name”(以及其他键),并且它是唯一的,在列表的任何其他字典中都不存在。

我想用键“name”访问“two”和“one”的值,有没有一种好的方法呢? 我猜一个字典的字典会很方便? 就像:
{'Foo': {'two': 'Baz', 'one': 'Bar'}, 'FooFoo': {'two': 'BazBaz', 'one': 'BarBar'}}

有了这种结构,我可以轻松地通过使用名称作为键来迭代名称以及获取其他数据。您对数据结构有其他建议吗?

我的主要问题是:最好的、最符合Python风格的方法是什么,可以进行此转换?

2个回答

14
d = {}
for i in listofdict:
   d[i.pop('name')] = i

如果你有Python2.7+:

{i.pop('name'): i for i in listofdict}

3
一旦你使用 .pop(),就停不下来了! - kindall

5
dict((d['name'], d) for d in listofdict)

如果您不介意在字典中保留“name”键,则这是最容易的方法。

如果您想删除“name”,仍然可以轻松地在一行中完成:

dict(zip([d.pop('name') for d in listofdict], listofdict))

你可以使用 d.pop('name'),就像我所做的那样(但不是在推导式中)。 - JBernardo

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