LevT
![](http://forum.ru-board.com/board/avatars/no_portait.gif)
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору MBK2 "можно самому нагуглить". А можно и не нагуглить. А можно убить кучу времени, продираясь через нерелевантную выдачу поисковиков, с негарантированным результатом. Все три жопоты отвечают сразу - но всё то, что в задании можно неправильно понять, будет ими понято неправильно. Так что, с ними ещё и учишься формулировать хотелки. Но! Надо уметь их ответами воспользоваться: оценить, что именно нерелевантно, переформулировать вопрос, руками поправить в ответе то, что поправимо... Добавлено: Хотя да, жопотоболталки тупят ответить на сверхсложные вопросы, ответы на которые реально невозможно нагуглить. Я уже с таким сталкивался (не только в области кодинга), что они зацикливаются на одном и том же ответе, с которого их невозможно сбить уточнениями вопроса. Добавлено: Итак, продолжаю долбаться с копилотом и добавляю хотелку: 1) Reduce the sanitized dictionary items to the list of sanitized items' keys. Ответ некрасиво выглядит и свидетельствует, что меня не очень поняли 2) Add the set of collected keys of the sanitized (callable-valued) dictionary items as a new dictionary item value at each nesting level: def sanitize_dict(d): sanitized = {} keys = [] for k, v in d.items(): keys.append(k) if isinstance(v, dict): sanitized[k] = sanitize_dict(v) elif callable(v): sanitized[k] = "<callable>" else: sanitized[k] = v sanitized['collected_keys'] = set(keys) return sanitized def test_nested_dict(): nested_dict = construct_nested_dict() sanitized = sanitize_dict(nested_dict) print(sanitized) # or do something with the sanitized dictionary Добавлено: 3) rewrite sanitize_dict function using FP-styled 'fold' Sure, in functional programming, ‘fold is a concept that is used to reduce a data structure to a single value. In Python, the functools.reduce function provides similar functionality. Heres how you might rewrite the sanitize_dict function using functools.reduce: from functools import reduce def sanitize_dict(d): def sanitize_item(acc, item): k, v = item if isinstance(v, dict): acc[k] = sanitize_dict(v) elif callable(v): acc[k] = "<callable>" else: acc[k] = v return acc sanitized = reduce(sanitize_item, d.items(), {}) sanitized['collected_keys'] = set(d.keys()) return sanitized def test_nested_dict(): nested_dict = construct_nested_dict() sanitized = sanitize_dict(nested_dict) print(sanitized) # or do something with the sanitized dictionary Добавлено: Дальше я его попросил заюзать ещё и Y комбинатор - но код улучшению не поддаётся, он само совершенство. Тот самый fixed point достигнут. Мозги я практически не включал, только знание терминологии и настойчивость в формулировке своих хотелок. | Всего записей: 17833 | Зарегистр. 14-10-2001 | Отправлено: 19:01 21-04-2024 | Исправлено: LevT, 20:59 21-04-2024 |
|