Adding a dict-merging utility
authorEli Bendersky <eliben@gmail.com>
Mon, 15 Jan 2018 13:50:13 +0000 (05:50 -0800)
committerEli Bendersky <eliben@gmail.com>
Mon, 15 Jan 2018 13:50:13 +0000 (05:50 -0800)
elftools/common/utils.py
test/test_utils.py

index d8acefab2c922eea688ecfca25dc786076e0f973..4e80e188d47a9bb6d1421fc8b3b0c21f49ff4b58 100644 (file)
@@ -12,6 +12,14 @@ from .py3compat import int2byte
 from ..construct import ConstructError
 
 
+def merge_dicts(*dicts):
+    "Given any number of dicts, merges them into a new one."""
+    result = {}
+    for d in dicts:
+        result.update(d)
+    return result
+
+
 def bytelist2string(bytelist):
     """ Convert a list of byte values (e.g. [0x10 0x20 0x00]) to a bytes object
         (e.g. b'\x10\x20\x00').
index 86b1da130f066efa307a09162117ed31a7248473..23669e73091254774df74e513d6caed4a578e3d2 100644 (file)
@@ -8,7 +8,7 @@ import unittest
 from random import randint
 
 from elftools.common.py3compat import int2byte, BytesIO
-from elftools.common.utils import (parse_cstring_from_stream,
+from elftools.common.utils import (parse_cstring_from_stream, merge_dicts,
         preserve_stream_pos)
 
 
@@ -54,5 +54,15 @@ class Test_preserve_stream_pos(unittest.TestCase):
         self.assertEqual(sio.tell(), 5)
 
 
+class Test_merge_dicts(unittest.TestCase):
+    def test_basic(self):
+        md = merge_dicts({10: 20, 20: 30}, {30: 40, 50: 60})
+        self.assertEqual(md, {10: 20, 20: 30, 30: 40, 50: 60})
+
+    def test_keys_resolve(self):
+        md = merge_dicts({10: 20, 20: 30}, {20: 40, 50: 60})
+        self.assertEqual(md, {10: 20, 20: 40, 50: 60})
+
+
 if __name__ == '__main__':
     unittest.main()