dict类的列表

时间:2014-05-23 12:00:32

标签: python iterable

我有一堆包含People个类的列表。我希望得到每个People.name属性(通过get_name方法),因此它成为该实例进入字典的关键。

示例:

people_list = [person1, person2, person3, person4]
# Becomes:
people_dict = {'John': person1, 'Mary': person2, 'Mike': person3, 'Jay Z': person4]

当然,这可以通过适当的循环轻松实现,但我正在寻找一种进行此转换的pythonic,有效方法。

我找到了this question,并尝试了一下接受的答案:

from itertools import izip
iterable = iter(people_list)
people_dict = dict(izip(iterable.get_name, iterable))

当然,这不起作用,因为iterable不是People类的实例,而是listiterator没有名为get_code的方法。但我想我很清楚我想要实现的目标。

那么,任何想法?我目前正在使用python 2.7。

2 个答案:

答案 0 :(得分:3)

您可以使用词典理解来制作词典:

people_dict = {p.get_name(): p for p in people_list}

这会为people_list中的每个条目生成一个键值对,其中的密钥取自p.get_name()方法调用。

您也可以使用dict()调用来执行此操作,在这种情况下,您可以使用生成键值对的生成器表达式作为元组:

people_dict = dict((p.get_name(), p) for p in people_list)

后者是您必须在较旧的Python版本上使用的语法,因为字典理解仅添加到Python 2.7及更高版本。

zip()(或itertools.izip())仅在您使用键和值分隔可迭代时才有用,并且需要在创建字典之前对其进行配对。你在这里没有这个;你有一个直接能够提供密钥的对象列表。

答案 1 :(得分:1)

您可以使用与制作列表相同的方式制作词典。

{element.get_name(): element for element in people_list}