你觉得
dict(test)
的输出怎么样?
{'ent1': 4, 'ent2': 3.5, 'ent3': 4.5}
或者您可能想将其转换回元组列表,方法如下:
>>> list(dict(test).items())
[('ent1', 4), ('ent2', 3.5), ('ent3', 4.5)]
编辑:这将保留最后一个分配的值,但您也可以通过首先反转列表来保留第一个分配的值:
>>> list(dict(reversed(test)).items())
[('ent2', 12), ('ent1', 24), ('ent3', 4.5)]
编辑2:如果您还想保留列表顺序,那么以下是一个好的一行解决方案(受Julien答案启发):
>>> [(uk,next(v for k,v in test if k == uk)) for uk in dict(test).keys()]
[('ent1', 24), ('ent2', 12), ('ent3', 4.5)]
最后,使用 functools.reduce 可以得到另一个一行代码的解决方案:
>>> from functools import reduce
>>> reduce(lambda lu,i:i[0] in dict(lu).keys() and lu or lu+[i], test, [])
[('ent1', 24), ('ent2', 12), ('ent3', 4.5)]
解释: lu
是只包含唯一键的列表,i
是test
列表中的下一个项。如果i[0]
,即下一个元素的键已经存在于lu
中,我们保留lu
,否则我们将i
添加到lu
中。
dict
确实 保持顺序。然而,set
仍然不保持顺序,所以你在问题中的代码不会保留顺序。 - PM 2Ring