开发者

Losing elements in python code while creating a dictionary from a list?

I have some headache w开发者_运维问答ith this python code.

    print "length:", len(pub) # length: 420
    pub_dict = dict((p.key, p) for p in pub)
    print "dict:", len(pub_dict) # length: 163

If I understand this right, I get a dictionary containing the attribute p.key as key and the object p as its value for each element of pub. Are there some side effect I don't see? Because len(pub_dict) should be the same as len(pub) and it is certainly not here, or am I mistaken?


Since you may have several p with the same key then you may use list as value for you key within new dicitionary:

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

Or if it is neccessary for you to uniquely identify each record you may use any combined key like key + any other p propery value


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

would have give you light on the problem

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜