A collection of useful tools for manipulating dictionaries.
Project description
dictutils
A collection of useful tools for manipulating dictionaries.
dictutils.qsdict
Takes a list of dicts or objects and convert it into nested dicts.
lst = [
{"shape": "circle", "colour": "blue", "count": 5},
{"shape": "circle", "colour": "pink", "count":15},
{"shape": "square", "colour": "yellow", "count": 29},
{"shape": "square", "colour": "blue", "count": 10}
]
qsdict(lst, "shape", "colour", "count")
# returns
{
"circle": {
"blue": 5,
"pink": 15
},
"square": {
"yellow": 29,
"blue": 10
}
}
qsdict(lst, "colour", "shape", "count")
# returns
{
"blue": {
"circle": 5,
"square": 10
},
"pink": {
"circle": 15
},
"yellow": {
"square": 29
}
}
Can also accept callables
qsdict(lst, lambda x: x["colour"][0:2], "shape", "count")
{
"bl": {
"circle": 5,
"square": 10
},
"pi": {
"circle": 15
},
"ye": {
"square": 29
}
}
Access an arbitary number of arguments
lst = [
{"shape": "circle", "colour": "blue", "country": "France", "count": 5},
{"shape": "circle", "colour": "pink", "country": "Germany", "count":15},
{"shape": "square", "colour": "yellow", "country": "France", "count": 29},
{"shape": "square", "colour": "blue", "country": "China", "count": 10}
]
qsdict(lst, lambda x: x["colour"][0:2], "shape", "country","count")
# Returns
{
"bl": {
"circle": {
"France": 5
},
"square": {
"China": 10
}
},
"pi": {
"circle": {
"Germany": 15
}
},
"ye": {
"square": {
"France": 29
}
}
}
Pass a tuple as the last argument if you prefer the leaf node to be a list
qsdict(lst, lambda x: x["colour"][0:2], "shape", ("country","count"))
{
"bl": {
"circle": [
"France",
5
],
"square": [
"China",
10
]
},
"pi": {
"circle": [
"Germany",
15
]
},
"ye": {
"square": [
"France",
29
]
}
}
dictutils.mergedict
Merges two nested dictionaries. Note that the first dictionary is updated.
d1 = {
"blue": {
"circle": {
"France": 5
},
"square": {
"China": 10
}
},
"pink": {
"circle": {
"Germany": 15
}
},
"yellow": {
"square": {
"France": 29
}
}
}
d2 = {
"blue": {
"brightness": 4,
},
"pink": {
"brightness": 4,
},
"yellow": {
"brightness": 4,
}
}
mergedict(d1, d2)
print(d1)
{
"blue": {
"circle": {
"France": 5
},
"square": {
"China": 10
},
"brightness": 4
},
"pink": {
"circle": {
"Germany": 15
},
"brightness": 4
},
"yellow": {
"square": {
"France": 29
},
"brightness": 4
}
}
If you don't want to clobber the first dictionary, provide an empty dictionary
d0 = {}
mergedict(d0, d1)
mergedict(d0, d2)
This can be repeated an arbitary number of times to create a complicated data structure while avoiding nested loops and unwieldy code. This code is courtsey of this Stack Overflow thread.
dictutils.pivot
Pivots a dictionary by a given list of keys
d1 = {
"A": {
"Category1": {
"X": 111111,
"Y": 222222,
},
"Category2": {
"X": 333333,
"Y": 444444,
},
"Category3": {
"X": 555555,
"Y": 666666,
}
},
"B": {
"Category1": {
"X": 777777,
"Y": 888888,
},
"Category2": {
"X": 999999,
"Y": 101010,
},
"Category3": {
"X": 101011,
"Y": 101012,
}
},
}
print(pivot(d, [2, 1, 0])
{
"X": {
"Category1": {
"A": 111111,
"B": 777777,
},
"Category2": {
"A": 333333,
"B": 999999,
},
"Category3": {
"A": 555555,
"B": 101011,
},
},
"Y": {
"Category1": {
"A": 222222,
"B": 888888,
},
"Category2": {
"A": 444444,
"B": 101010,
},
"Category3": {
"A": 666666,
"B": 101012,
},
},
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file dictutils-0.1.7.tar.gz
.
File metadata
- Download URL: dictutils-0.1.7.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e00b686419fc5fd6725f08890410191810ec28eae9ec7e8331c44f2443c95944 |
|
MD5 | 6b49de00adc2979bad6e3e328ef28699 |
|
BLAKE2b-256 | 3f8469f66d115ac13a4825fabeb868e1defb2b1db7bbdbcb6e3eb4d6e91badc2 |