Allows collapsing of nested for loops via dictionary iteration
Project description
Simple loop structure to iterate over all combinations of an initializing dictionary
No longer will you need a million nested for-loops…
The optionloop works as follows:
First, initialize a dictionary with various keys and values, e.g.:
d = {'doThingX' : [True, False], 'doThingY' : False,
'thingZValue' : ['a', 'b', 1]}
Next create the option loop:
oploop = optionloop(d)
Finally iterate and get your values:
for state in oploop:
doX = state['doThingX']
doY = state['doThingY']
zVal = state['thingZValue']
f(doX, doY, zVal)
This is intended to replace an equivalent looping structure of:
for doX in doThingX:
for doY in doThingY:
for zVal in thingZValue:
f(doX, doY, zVal)
which quickly becomes cumbersome.
Also, option loops can be added to create even more complex looping structures, e.g.:
d1 = {'lang' : ['c'], 'doThingX' : [True, False]}
d2 = {'lang' : ['fortran'], 'doThingX' : [True, False], 'doThingY' : [True, False]}
oploop1 = optionloop(d1)
oploop2 = optionloop(d2)
oploop = oploop1 + oploop2
for state in oploop:
...
is equivalent to:
langs = ['c', 'fortran']
doThingX = [True, False]
doThingY = [True, False]
for lang in langs:
if lang == 'c':
for doX in doThingX:
f(lang, doX)
elif lang == 'fortran':
for doX in doThingX:
for doY in doThingY:
f(lang, doX, doY)
Note, if the order of iteration matters an ordered dict can be used, e.g.:
d = OrderedDict()
d['a'] = [False, True]
d['b'] = [False]
d['c'] = [1, 2, 3]
oploop = optionloop(d)
for state in oploop:
...
is equivalent to:
for a in [False, True]:
for b in [False]:
for c in [1, 2, 3]:
....
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for optionloop-1.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 234f1a7a672605dd8b52c015ab326ea7f5b2e63da17dc1788ec7ece624a5a61c |
|
MD5 | 2b7ad1975baa869b0665dce0ba1c4f18 |
|
BLAKE2b-256 | 1d800ab4135bdec91438547d4f6adfd02a51f1c9cc6be7940bba5c9e38cd312b |