Valdez (1-0) held the Astros to one run over five innings, allowing five hits, striking out two and walking three to gain a victory in his first big league appearance.
Valdez was making the start in place of the injured Kris Benson (shoulder). Esmerling Vasquez, Aaron Heilman and Blaine Boyer teamed up to twirl four innings of scoreless relief to lock down the victory.
Snyder's three-run blast in the fourth inning was his fifth of the season for the Diamondbacks, while Chris Young contributed three hits and three RBI and Mark Reynolds went 2-for-4 as Arizona snapped a three-game losing streak.
The Astros dropped their seventh straight. Carlos Lee hit an RBI double while Felipe Paulino (0-4) was touched for four runs, five hits and four walks in six innings.