The problem with your current code is here:
range(2, 10) + ["J", "Q", "K", "A"]
First off, it should be range(2, 11)
, otherwise, cards with the number 10 are omitted. Second, in order to join the range and the list, you'll have to do like so:
list(range(2, 11)) + ["J", "Q", "K", "A"]
So the final result will be:
deck = [(value, suit) for value in list(range(2, 11)) + ["J", "Q", "K", "A"] for suit in ["H", "C", "D", "S"]]
I think this will give you the desired output (first all non-face cards, then all face cards).