The Jambos finished with nine men after captain Michael Stewart and defender Ismael Bouzid both saw red at New Douglas Park.
Goals from James McArthur – his first for exactly a year – and Simon Mensing handed Accies a deserved advantage in the opening half hour.
Eggert Jonsson pulled one back to give Hearts real hope until Stewart received his marching orders for lashing out at Alex Neil.
Hamilton’s win was their first at home for almost three months, moving them level with their opponents and five points clear of rock-bottom Falkirk.
Winger Suso Santana, who had been out for six weeks following hernia surgery, was one of three changes for the visitors, who had Jose Goncalves back from suspension and also recalled Ian Black.
Hamilton replaced Marco Paixao and David Elebert with Guillaume Beuzelin and Trent McClenahan, respectively.
Hearts, who recorded the maiden away win of their stuttering season at Kilmarnock last weekend, were seeking their first back-to-back victories of the campaign.
Following an impeccably-observed minute’s silence for a young Accies fan who died last week, the home side got the game under way.
And they were ahead inside five minutes thanks to McArthur’s first goal for exactly a year.
The midfielder slipped in Mickael Antoine-Curier, whose shot clattered off the post for McArthur to fire high into the net.
The same players combined for what should have been number two in the 12th minute, McArthur robbing Goncalves and crossing for Antoine-Curier, who scuffed his finish.
James Wesolowski teed himself up for a fine volley that flashed just wide and Antoine-Curier fired over a free-kick as Hamilton continued to dominate.
Suso earned the first booking 18 minutes in for chopping down Wesolowski before Ian Black had Hearts’ first effort, volleying straight at Tomas Cerny.
Mensing doubled Hamilton’s lead in the 25th minute, bundling home Wesolowski’s cross for his fourth goal of the season.
Hearts made an immediate change, replacing defender Dawid Kucharski with midfielder David Obua.
The new man almost had an instant impact when he got his head to a cross but he was under too much pressure to direct it properly.
Stewart was well wide with a long-range left-foot drive and Black volleyed over as the visitors finally got going.
And they pulled a goal back six minutes before the break when Jonsson slid in to convert Obua’s low cross, his second goal in as many games.
Hearts withdrew goalkeeper Janos Balogh for Jamie MacDonald at the interval.
Their comeback hopes then suffered a severe dent three minutes in when Stewart was sent off after lashing out at opposite number Neil right under referee David Somers’ nose.
Stewart protested furiously before eventually walking.
Hamilton withdrew Beuzelin for Paixao and looked to have missed great chance to score their third goal when MacDonald saved from Antoine-Curier, but the striker had already been flagged offside.
Craig Thomson was booked for a firm tackle on Paixao, whose free-kick was carried by MacDonald into his own net before Somers blew for a foul on the keeper.
The cards were coming thick and fast, Ismael Bouzid seeing yellow for tripping McArthur just outside the area, with Paixao’s latest free-kick turned behind by MacDonald.
Suso almost levelled when Thomson’s cross was headed straight at Cerny by Suso, who was then replaced by Calum Elliot.
Thomson then produced a superb tackle and block to prevent Antoine-Curier scoring on the break before Hearts suffered a scare when MacDonald needed treatment to his left arm.
The 10 men were still very much in the game going into the final 20 minutes and again went close when Thomson’s free-kick evaded everyone and drifted just wide.
The right-back escaped a second yellow for a foul on Richie Hastings.
Paixao was making a real impact and showed great chest control on McClenahan’s free-kick but followed that with a wayward finish.
Somers did then issue a second yellow card to Bouzid with nine minutes remaining after he brought down Wesolowski.
McArthur and Paixao both went close to putting the seal on Hamilton’s win late on before David Elebert came on for Wesolowski in stoppage-time.
Mensing also tested MacDonald before the final whistle but the result was already assured.
The game ended amid reports of punches being thrown in the tunnel and players being called to the referee’s room.