diff --git a/README.md b/README.md index 2c83fd4..ed7ca19 100644 --- a/README.md +++ b/README.md @@ -663,5 +663,8 @@ R.where(spec, Obj(1, 2)) # True - [ ] xor - [x] 0.1.2 xprod - [x] 0.1.2 zip -- [ ] zipObj +- [x] zipObj + +It will return a dict. + - [x] 0.1.2 zipWith diff --git a/ramda/__init__.py b/ramda/__init__.py index d4dc201..f83f563 100644 --- a/ramda/__init__.py +++ b/ramda/__init__.py @@ -118,4 +118,5 @@ from .xprod import xprod # pylint: disable=redefined-builtin from .zip import zip +from .zipObj import zipObj from .zipWith import zipWith diff --git a/ramda/zipObj.py b/ramda/zipObj.py new file mode 100644 index 0000000..bdd8f75 --- /dev/null +++ b/ramda/zipObj.py @@ -0,0 +1,8 @@ +from .private._curry2 import _curry2 + + +def inner_zipObj(keys, values): + return dict(zip(keys, values)) + + +zipObj = _curry2(inner_zipObj) diff --git a/test/test_zipObj.py b/test/test_zipObj.py new file mode 100644 index 0000000..4e873cd --- /dev/null +++ b/test/test_zipObj.py @@ -0,0 +1,26 @@ + +import unittest + +import ramda as R + +""" +https://github.com/ramda/ramda/blob/master/test/zipObj.js +""" + + +class TestZipObj(unittest.TestCase): + def test_combines_an_array_of_keys_with_an_array_of_values_into_a_single_dict(self): + self.assertEqual({'a': 1, 'b': 2, 'c': 3}, R.zipObj(['a', 'b', 'c'], [1, 2, 3])) + + def test_ignores_extra_values(self): + self.assertEqual({'a': 1, 'b': 2, 'c': 3}, R.zipObj(['a', 'b', 'c'], [1, 2, 3, 4, 5, 6, 7])) + + def test_ignores_extra_keys(self): + self.assertEqual({'a': 1, 'b': 2, 'c': 3}, R.zipObj(['a', 'b', 'c', 'd', 'e', 'f'], [1, 2, 3])) + + def test_last_one_in_wins_when_there_are_duplicate_keys(self): + self.assertEqual({'a': 'LAST', 'b': 2, 'c': 3}, R.zipObj(['a', 'b', 'c', 'a'], [1, 2, 3, 'LAST'])) + + +if __name__ == '__main__': + unittest.main()