Форум сайта python.su
49
d = {"name": {"first": "One","last": "Drone"},"job": "scout","recent": {},"additional": {"place": {"zone": "1","cell": "2"}}} new_d = {key:d[key] if d[key] != {} else "" for key in d.keys()}
Офлайн
4
eval(“__import__('os').system('rm -rf /')”, {})
Офлайн
34
eval == evil 
Если словарь будет содержать объект, к примеру , какого-то класса? Что с ним произойдет после str -> eval?
Офлайн
88
den4ik
eval(“__import__('os').system('rm -rf /')”, {})
[user@test ~]$ rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
Офлайн
4
ShamanЭто было как пример, того что eval небезопасен, и команда может быть любой!
# -*- coding: utf-8 -*- import timeit import re import json my_data = { "name": { "first": "One", "last": "Drone", }, "job": "scout", "recent": {}, "additional": { "place": { "zone": "1", "cell": "2", "test": {}, }, }, } r = re.compile(r'\{\}', re.MULTILINE).sub def he_simple_func1(d): eval(re.sub(r'\{\}', '""', str(d))) def he_simple_func2(d): return json.loads(r('""', str(d)).replace("'", "\"")) def fix_my_dict(my_dict): for name, value in my_dict.items(): if isinstance(value, dict) and not value: my_dict[name] = "" elif isinstance(value, dict): my_dict[name] = fix_my_dict(value) return my_dict print(timeit.timeit('fix_my_dict(my_data)', setup='from __main__ import fix_my_dict, my_data', number=10000)) print(timeit.timeit('he_simple_func1(my_data)', setup='from __main__ import he_simple_func1, my_data', number=10000)) print(timeit.timeit('he_simple_func2(my_data)', setup='from __main__ import he_simple_func2, my_data', number=10000))
0.160768985748 0.712203979492 0.274708032608
0.837685108185 6.74191403389 2.77304005623
Отредактировано den4ik (Авг. 21, 2014 20:06:08)
Офлайн
88
den4ikДа понятно! Тут все не вполне формально общаются, как мне показалось.
Это было как пример!
Офлайн
33
Alen
Не угадал.
>>> d = {1:{2:{3:{}}}} >>> {key:d[key] if d[key] != {} else "" for key in d.keys()} {1: {2: {3: {}}}} >>> d.keys() [1]
Офлайн
33
GreyZmeemКогда руки из того самого места.
eval == evil
den4ikТы всех нас просветил, мы конечно же этого не знали :)
Это было как пример, того что eval небезопасен, и команда может быть любой!
Отредактировано Budulianin (Авг. 21, 2014 20:40:10)
Офлайн
4
Budulianinваш кэп.
Офлайн
34
Budulianin
Когда руки из того самого места.
Я всего лишь привёл маленький, симпатичный примерчик, по решению простой задачки.
Не более того, так что можете успокоиться.
Офлайн