列表中的理解dict.fromkeys(SetA,...)

时间:2014-01-22 18:13:37

标签: python python-2.7 dictionary list-comprehension

我想使用预先存在的信息生成新词典。使用dict.fromkeys()传递set() DictA.keys()DictA.values()等参数,但是,这就是我所遇到的:

NewDictFromKeys = dict.fromkeys(set(DictA.keys()), DictA.values())

但是传递DictA.values()是逻辑,它会返回这个:

{'pnrdshfxgjltmqacbvuek': [10, 5, 14, 9, 7, 6, 1, 2, 4, 8, 12, 11, 13, 3],   'prktahjvqcgfsbuxdlemn': [10, 5, 14, 9, 7, 6, 1, 2, 4, 8, 12, 11, 13, 3], ...
 ... }

等等。

问题是:为每个键分配一个与其自身对应的值。我提到了List Comprehension,因为它可能是一个很好的解决方案,但如何应用是另一个问题。

2 个答案:

答案 0 :(得分:3)

那是因为dict.fromkeys()重用了所有值的第二个参数。您一遍又一遍地存储相同列表作为参考。

改为使用字典理解:

{k: DictA.values() for k in DictA}

每次迭代都会执行dict理解中的左侧键和值表达式。每次再次调用DictA.values()时,都会生成一个新的列表对象。

请注意,您无需在此处拨打set(DictA),您可以直接在DictA 上遍历以获取所有密钥,而且它们已经是唯一的(它们必须是)。

答案 1 :(得分:0)

还考虑使用dict理解来修改当前的dict,如:

{k:v+data for k,v in DictA.items()}

或只是:

d = {}
for k,v in DictA.items():
    d[k] = manipulate(v)