Python
JSON Serialization for Custom Classes
Updated: September 24, 2024
Attempting to run json.dumps() on a custom class results in the error: "Object of type ____ is not JSON serializable."
By returning the __dict__ as the serializer in a lambda passed to the default parameter of json.dumps(), we can get the class to serialize to JSON.
import json
class Object:
def __str__(self):
return json.dumps(
self,
default=lambda o: o.__dict__,
sort_keys=True,
indent=2)
def __repr__(self):
self.__str__()
# Even better
from dataclasses import dataclass
import orjson
@dataclass()
class Car:
def __init__(self):
self.wheel_count = 4
c1 = Car()
print( orjson.dumps(c1).decode('utf-8') ) # Returns {"wheel_count":4}
Converting Nested Loops to Single with Cartesian Product
Updated: September 25, 2024
$ python3
Python 3.12.3 (main, May 22 2024, 17:31:33) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> arr1 = [1, 2, 3]
>>> arr2 = [2, 3, 5]
>>> for x in arr1:
... for y in arr2:
... if x == y:
... print(str(x) + ' is in both arrays')
...
2 is in both arrays
3 is in both arrays
>>> from itertools import product
>>> arr1 = [1, 2, 3]
>>> arr2 = [2, 3, 5]
>>> for x, y in list(product(arr1, arr2)):
... if x == y:
... print(str(x) + ' is in both arrays')
...
2 is in both arrays
3 is in both arrays
String Interpolation
Updated: November 10, 2024
$ python3
Python 3.12.3 (main, May 22 2024, 17:31:33) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> name = "Nitin"
>>> age = 40
>>> 'Name: %s ; Age: %d' % (name, age)
'Name: Nitin ; Age: 40'
>>> f'Name: {name} ; Age: {age}'
'Name: Nitin ; Age: 40'
>>> 'Name: %{name}s ; Age: %{age}d' % {'name': name, 'age': age}
'Name: Nitin ; Age: 40'
>>> 'Name: {name} ; Age: {age}'.format(name=name, age=age)
'Name: Nitin ; Age: 40'
>>> from string import Template
>>> tpl = Template('Name: $name ; Age: $age')
>>> tpl.substitute(name=name, age=age)
'Name: Nitin ; Age: 40'
With f-strings, in-line arithmetic is also possible.