1. A machine-implemented method for processing network packets, comprising: determining common key type sets from a plurality of network processing rules; wherein determining the common key type sets from the plurality of network processing rules comprises: determining a first key type set from one of the plurality of network processing rules; comparing the first key type set to a set of known key type sets; when the first key type set is found as a known key type set, incrementing a counter associated with the known key type set; and when the first key type set is not found as a known key type set, adding the first key type set to the known key type set and associating a new counter value with the first key type set; creating one or more hash data structures using the most common key type sets; programming network processing rules that use the most common key type sets into the one or more hash data structures; programming remaining network processing rules into a content addressable memory (CAM); and using the one or more hash data structures and the CAM to find an appropriate network processing rule to process a network packet.