diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py
index 8b9ff7a4c9..d8a43016a8 100644
--- a/lib/ansible/plugins/filter/core.py
+++ b/lib/ansible/plugins/filter/core.py
@@ -488,6 +488,19 @@ def flatten(mylist, levels=None):
     return ret
 
 
+def dict_to_list_of_dict_key_value_elements(mydict):
+    ''' takes a dictionary and transforms it into a list of dictionaries,
+        with each having a 'key' and 'value' keys that correspond to the keys and values of the original '''
+
+    if not isinstance(mydict, MutableMapping):
+        raise AnsibleFilterError("dict2items requires a dictionary, got %s instead." % type(mydict))
+
+    ret = []
+    for key in mydict:
+        ret.append({'key': key, 'value': mydict[key]})
+    return ret
+
+
 class FilterModule(object):
     ''' Ansible core jinja2 filters '''
 
@@ -574,4 +587,5 @@ class FilterModule(object):
             'combine': combine,
             'extract': extract,
             'flatten': flatten,
+            'dict2items': dict_to_list_of_dict_key_value_elements,
         }