在列表字典中删除每个列表的最后一个元素有什么更加pythonic或有效的方法?
例如,拿这个:
listDict = {'tom': [-2,10,2,-8], 'sam': [-9,-10,-10,-7]}
并将其转化为:
listDict = {'tom': [-2,10,2], 'sam': [-9,-10,-10]}
这就是我目前正在做的事情:
new = {}
for t,item in listDict.iteritems():
new[t] = [item[0], item[1], item[2]]
listDict= new
解决方法:
与此解决方案相比,随着列表长度的增加,Blender的答案变得非常低效:
for k, v in listDict.items():
v.pop()
对于你的示例listDict,差异并不大,只有27%.但是使用带有100个密钥的dict和长度从50到100的列表,并弹出50个,dict理解方法需要的时间要长12倍.这是因为此解决方案修改了存在列表,而不是每次都创建每个列表的副本.
我担心没有单行版本,除非你是cheating.我提到这一点的原因是为了防止某些dofus感到被迫在评论中指出它.请不要使用dict / list comprehensions进行副作用.
当然你可以在一行上完成如下操作,但PEP8说“而不是”:
for k, v in listDict.items(): v.pop()
标签:python,dictionary
来源: https://codeday.me/bug/20190713/1447048.html