Sitecore provides NameValueList & NameLookupValueList fields for storing Key/Value pair of dynamic n number of data. These fields are highly usefull though they don’t come to use that often like Treelist or Multilist fields.
Recently, for one of my requirements, i was needed to lookup the key instead of the values. And values will be entered manually. I was already aware of the such custom field created by @jammykam which you can find here: https://jammykam.wordpress.com/2015/03/08/custom-sitecore-field-for-storing-keyvalue-data-with-lookups/