我想使用预先存在的信息生成新词典。使用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,因为它可能是一个很好的解决方案,但如何应用是另一个问题。
答案 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)