diff --git a/README.md b/README.md
index fa72185db..1d6d0a509 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,7 @@
# 30-seconds-of-python-code
[](https://github.com/kriadmin/30-seconds-of-python-code/blob/master/LICENSE) [](https://gitter.im/30-seconds-of-python-code/Lobby) [](http://makeapullrequest.com) [](https://travis-ci.org/kriadmin/30-seconds-of-python-code) [](https://insight.io/github.com/kriadmin/30-seconds-of-python-code/tree/master/?source=0) [](https://github.com/Flet/semistandard)
+[](https://app.fossa.io/projects/git%2Bgithub.com%2Fkriadmin%2F30-seconds-of-python-code?ref=badge_shield)
>Python implementation of 30-seconds-of-code.
@@ -27,6 +28,7 @@
count_occurences
deep_flatten
difference
+difference_by
shuffle
spread
zip
@@ -309,6 +311,8 @@ compact([0, 1, False, 2, '', 3, 'a', 's', 34]) # [ 1, 2, 3, 'a', 's', 34 ]
### count_by
+:information_source: Already implemented via `collections.Counter`
+
Groups the elements of a list based on the given function and returns the count of elements in each group.
Use `map()` to map the values of the list using the given function. Iterate over the map and increase the the elements count each time it occurs.
@@ -422,6 +426,32 @@ difference([1, 2, 3], [1, 2, 4]) # [3]
:arrow_up: Back to top
+### difference_by
+
+Returns the difference between two list, after applying the provided function to each list element of both.
+
+Create a `set` by applying `fn` to each element in `b`, then use list comprehension in combination with fn on a to only keep values not contained in the previously created `set`.
+
+```py
+def difference_by(a, b, fn):
+ b = set(map(fn, b))
+ return [item for item in a if fn(item) not in b]
+
+ ```
+
+View Examples
+
+```py
+
+from math import floor
+difference_by([2.1, 1.2], [2.3, 3.4],floor) # [1.2]
+difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x']) # [ { x: 2 } ]
+
+```
+
+
+
:arrow_up: Back to top
+
### shuffle
:information_source: The same algorithm is already implemented via `random.shuffle`.
@@ -460,7 +490,7 @@ shuffle(foo) # [2,3,1] , foo = [1,2,3]
### spread
-Implements javascript's spread syntax as a function. Flattens the list(non-deep) and returns an list.
+Implements javascript's `[].concat(...arr)`. Flattens the list(non-deep) and returns an list.
```py
def spread(arg):
@@ -721,3 +751,8 @@ palindrome('taco cat') # True
## Credits
*Icons made by [Smashicons](https://www.flaticon.com/authors/smashicons) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).*
+
+
+
+## License
+[](https://app.fossa.io/projects/git%2Bgithub.com%2Fkriadmin%2F30-seconds-of-python-code?ref=badge_large)
diff --git a/snippets/difference_by.md b/snippets/difference_by.md
index 727c303aa..5fcd004a2 100644
--- a/snippets/difference_by.md
+++ b/snippets/difference_by.md
@@ -1,7 +1,12 @@
### difference_by
-``` python
+
+Returns the difference between two list, after applying the provided function to each list element of both.
+
+Create a `set` by applying `fn` to each element in `b`, then use list comprehension in combination with fn on a to only keep values not contained in the previously created `set`.
+
+```python
def difference_by(a, b, fn):
- b = set(map(fn,b))
+ b = set(map(fn, b))
return [item for item in a if fn(item) not in b]
```
diff --git a/tag_database b/tag_database
index 6e4cdc7a8..c1b7f4491 100644
--- a/tag_database
+++ b/tag_database
@@ -20,4 +20,5 @@ decapitalize:string
palindrome:string
is_upper_case:string
is_lower_case:string
-count_by:list
\ No newline at end of file
+count_by:list
+difference_by:list
\ No newline at end of file