从列表创建字典时,python代码中的元素丢失了吗?

从列表创建字典时,python代码中的元素丢失了吗?,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,我对这段python代码有些头疼 print "length:", len(pub) # length: 420 pub_dict = dict((p.key, p) for p in pub) print "dict:", len(pub_dict) # length: 163 如果我理解正确,我会得到一个字典,其中包含属性p.key作为key,对象p作为pub的每个元素的值。有什么副作用我看不出来吗?因为len(pub_dict)应该与len(pub)相同,它肯定不

我对这段python代码有些头疼

    print "length:", len(pub) # length: 420
    pub_dict = dict((p.key, p) for p in pub)
    print "dict:", len(pub_dict) # length: 163
如果我理解正确,我会得到一个字典,其中包含属性
p.key
作为key,对象
p
作为
pub
的每个元素的值。有什么副作用我看不出来吗?因为
len(pub_dict)
应该与
len(pub)
相同,它肯定不在这里,或者我弄错了

pub_dict = {}
for i,p in enumerate(pub):
     pub_dict[p.key] = p
     print i+1,len(pub_dict)

将为您提供有关问题的说明

由于您可能有多个p具有相同的键,因此您可以在新的Dictionary中使用list作为键的值:

pub_dict = {}    
for p in pub:
   if not p.key in pub_dict:
      pub_dict[p.key] = []
   pub_dict[p.key].append(p)

或者,如果您需要唯一地标识每条记录,您可以使用任意组合键,例如key+任何其他p属性值

,如果在
pub
中有多个
p.key
具有相同的
p.key,则只有最后一个键会出现在字典中,因为每个键只能包含一个值。@Sven:是的,有一些!谢谢你指出这一点!现在我知道错误来自哪里了。也许你想把你的评论变成一个答案,这样我就可以接受了。