title: How to rearrange an Ordered Dictionary with a based on part of the key from a list
body: <p>I am rearranging some Ordered Dictionary based on the key from a list. 
  Such in:</p>
  
  <pre><code>old_OD = OrderedDict([('cat_1',1), 
              ('dog_1',2), 
              ('cat_2',3),
              ('fish_1',4), 
              ('dog_2',5)])
  </code></pre>
  
  <p>Now I have a list of the group's order.</p>
  
  <pre><code>order = ['dog', 'cat', 'fish']
  </code></pre>
  
  <p>and get the result with the items in the dictionary grouped together, as such:</p>
  
  <pre><code>new_OD = OrderedDict([('dog_1',2),
              ('dog_2',5), 
              ('cat_1',1), 
              ('cat_2',3),
              ('fish_1',4)])
  </code></pre>
  
  <p>I found some excellent related question <a href="https://stackoverflow.com/questions/18405537/how-to-reorder-a-python-ordered-dict-based-on-array">How to reorder OD based on list</a> and <a href="https://codereview.stackexchange.com/questions/86294/reordering-ordereddict?newreg=5ae766f9616e43609f1108cd7c40d3ca">Re-ordering OrderedDict</a> and I am going with the solution in the second link </p>
  
  <pre><code>new_od = OrderedDict([(k, None) for k in order if k in old_od])
  new_od.update(old_od)
  </code></pre>
  
  <p>Now, in my case, "k" is not exact match and desired key value for the new_od, how should I modify to construct the new od? </p>
  
  <p>EDIT: So what happen if there is no underscore that mark the location of the keyword, like we have "Big_cat_3" or "dog_black_2"? The keyword could be anywhere in the string. Once the key are grouped together, alpha-numerical order is not needed. </p>