Serie A Wrap: Napoli, Juve earn midweek wins
In a game which saw both sides reduced to 10 men in Florence, Rafael Benitez's side took the lead after 12 minutes through Jose Callejon before Giuseppe Rossi equalised for the hosts from the penalty spot 16 minutes later.
Parity lasted only eight minutes however as Dries Mertens put the visitors ahead for a second time, before Napoli's Christian Maggio was dismissed 10 minutes out from the final whistle for a second bookable offence.
Fiorentina then saw Juan Cuadrado sent off in the dying stages, also after receiving a second caution.
Behind Napoli on goal difference are Juventus, who enjoyed a 4-0 home thrashing of 10-man Catania.
Goals from Arturo Vidal on 26 minutes and Andrea Pirlo eight minutes later put the hosts in control at the break, before Carlos Tevez's strike in the 66th minute was added to five minutes later by Leonardo Bonucci.
Catania saw Tiberio Guarente sent off late on, with Antonio Conte's side sealing a comfortable win as struggling Catania dropped into the relegation zone.
They were leapfrogged by Bologna, who claimed their second successive win with a 3-0 result at Cagliari.
Gyorgy Garics put the visitors ahead after 26 minutes, while Cagliari's task was made harder when they saw defender Nicola Murru sent off for a professional foul seven minutes after the break.
Bologna duly capitalised on their man advantage, as goals from Panagiotis Kone on 58 minutes and Michele Pazienza two minutes later put the seal on a resounding win which saw Cagliari fall to their third defeat in four.
Meanwhile, Hellas Verona moved up to fifth in the table thanks to a 2-0 home win over Sampdoria.
Juanito broke the deadlock six minutes after the interval, before Luca Toni's goal 12 minutes from time made the game safe as Verona claimed their fourth win in five matches to move level on points with fourth placed Inter.
Milan's indifferent start to the season continued as they squandered a lead to draw 1-1 at home to Lazio.
Kaka netted his first goal of the season in the 54th minute with a wonderful curling effort but Massimiliano Allegri's side were pegged back by Mickael Ciani's header 18 minutes from time.
Both Livorno and Torino's winless runs were extended as the two sides shared a 3-3 draw.
Visitors Torino got off to a dream start with two goals inside the opening eight minutes from Ciro Immobile and Kamil Glik, but Livorno were level at half-time after goals in the 25th and 33rd minutes from Paulinho and Leandro Greco.
Emerson then gave the hosts the lead for the first time on 62 minutes but they were denied a first win in eight, when Alessio Cerci netted three minutes from time as Torino's run stretched to five without a win.
Sassuolo remain entrenched in the bottom three after they went down 2-1 at home to Udinese.
Antonio Di Natale gave Udinese the lead from the penalty spot after 18 minutes before Simone Zaza equalised for the hosts seven minutes later.
Eleven minutes after the break, Luis Muriel scored what proved to be the winner before Zaza's evening turned sour when the striker was dismissed 10 minutes from time.
Elsewhere, Alberto Gilardino's 57th minute goal saw Genoa climb to 13th after beating Parma 1-0 at home.