我有一堆包含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。
答案 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}