-
-
Save richard-mihalovic/e19974a1e05d64f1b436 to your computer and use it in GitHub Desktop.
def dict_read_value(src, path, default=None): | |
value = src | |
keys = path.split('.') | |
for key in keys: | |
if isinstance(value, dict) and key in value: | |
value = value[key] | |
else: | |
return default | |
return value | |
# test | |
d = {'x': {'y': {'z': 1}}} | |
assert dict_read_value(d, 'x.y.z') == 1 | |
assert dict_read_value(d, 'x.x', -1) == -1 | |
assert dict_read_value(d, 'a.b.c', 0) == 0 |
jinak ja to resim podobne (byt to mam trochu komplikovanejsi): https://github.com/elasticsearch/elasticsearch-py/blob/master/test_elasticsearch/test_server/test_common.py#L70-L81 pro testy ala https://github.com/elasticsearch/elasticsearch/blob/master/rest-api-spec/test/update/10_doc.yaml#L39
To dava zmysel, zmenil som to ...
neni potreba pouzivat get() kdyz vis, ze tam ten klic je, pro genericke pripady (tebe se asi netyka) by mohlo byt fajn overit ze value je dict predtim nez do nej pristoupim (radek 6)
jen detail - na kontrolu typu nepouzivej porovnani ale radsi isinstance
Zmenil som type(value) == dict -> isinstance(value, dict).
Tu je vysvetlene preco je lepsie pouzit isinstance: http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in-python .
neni potreba pouzivat
get()
kdyz vis, ze tam ten klic je, pro genericke pripady (tebe se asi netyka) by mohlo byt fajn overit ze value jedict
predtim nez do nej pristoupim (radek 6)