Набор точек без каких-либо других ограничений не обязательно однозначно определяет многоугольник.
Итак, сначала вам нужно решить, какой полигон построить из этих точек - возможно, выпуклый корпус? http://en.wikipedia.org/wiki/Convex_hull
Затем триангулируем и вычисляем область. http://www.mathopenref.com/polygonirregulararea.html
Использование:
d = defaultdict(lambda: defaultdict(int))
Это создаст новый defaultdict(int)
всякий раз, когда к новому ключу будет доступ в d
.
Посмотрите на ответ nosklo здесь для более общего решения.
class AutoVivification(dict): """Implementation of perl's autovivification feature.""" def __getitem__(self, item): try: return dict.__getitem__(self, item) except KeyError: value = self[item] = type(self)() return value
Тестирование:
a = AutoVivification() a[1][2][3] = 4 a[1][3][3] = 5 a[1][2]['test'] = 6 print a
Выход:
blockquote>{1: {2: {'test': 6, 3: 4}, 3: {3: 5}}}
multiprocessing
недоволен отправкой их туда и обратно. – Noah 27 March 2012 в 17:49d[new_key]
, он вызовет лямбду, которая создаст новыйdefaultdict(int)
. И когда доступ кd[existing_key][new_key2]
, будет создан новыйint
. – interjay 11 October 2013 в 13:53multiprocessing
и о том, что называется функцией уровня модуля? Этот вопрос следует за ним. – Cecilia 15 April 2015 в 17:03