在从列表创建字典时,Python代码丢失元素?

6 投票
2 回答
2043 浏览
提问于 2025-04-16 19:00

我对这段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 个回答

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

这句话的意思是“本来可以让你更清楚这个问题的”。

4

因为你可能会有多个 p 拥有相同的键,所以你可以在新的字典中把值设置为一个列表:

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

或者,如果你需要唯一地识别每一条记录,你可以使用组合键,比如把键和其他 p 的属性值结合起来。

撰写回答