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

时间:2011-06-05 19:41:18

标签: 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作为键,对象p作为pub的每个元素的值。是否有一些副作用我看不到?因为len(pub_dict)应该与len(pub)相同而且肯定不在这里,或者我错了?

2 个答案:

答案 0 :(得分:4)

由于您可能有几个具有相同密钥的p,因此您可以使用list作为新密钥中的密钥值:

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

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

答案 1 :(得分:-1)

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

会让你了解问题