在从列表创建字典时,Python代码丢失元素?
我对这段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 的属性值结合起来。