Fala Ivan, beleza cara?
Seguinte, pensa que o código é executado linha por linha, certo? Então na linha : 'media = item[1]['km'] / (ano_atual - item[1]['ano'])'
o código faz a conta. Na linha de baixo, ele atualiza o segundo dicionário, o mais interno, que tem a característica do carro.
A última linha atualiza o dicionário "principal", entregando o resultado. Se você não faz essa linha, não tem atualização do dicionário e a função vai entender que o novo dicionário é o 'result' pedido no começo do código, que está vazio. Ou seja, sem essa linha, ele retorna vazio.
Se tiver apenas o item [0], ele vai retornar apenas com os nomes dos carros, e se tiver apenas o item [1] ele volta apenas com as características. Ou seja, o result.update serve para atualizar a lista da maneira correta com os dados novos da conta sem perder os dados anteriores dela.
Espero que tenha ajudado você!