new draft of double knockdown, using dictionary instead of grouper. about to go back to a list to preserve order