ВАЖНОЕ ПРИМЕЧАНИЕ: Вы имеете к [1 134], сортируют Ваши данные сначала.
<час>первая часть не добиралась, то, что в конструкции в качестве примера
groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)
k
текущий ключ группировки, и g
итератор, который можно использовать для итерации по группе, определенной тем ключом группировки. Другими словами, groupby
сам итератор возвращает итераторы.
Вот пример этого, с помощью более ясных имен переменной:
from itertools import groupby
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]
for key, group in groupby(things, lambda x: x[0]):
for thing in group:
print "A %s is a %s." % (thing[1], key)
print " "
Это даст Вам вывод:
перенос А является животным.
утка А является животным.кактус А является растением.
скоростная моторная лодка А является механизмом.
школьный автобус А является механизмом.
В этом примере, things
список кортежей, где первый объект в каждом кортеже является группой, второй объект принадлежит.
groupby()
функция берет два аргумента: (1) данные для группировки и (2) функция для группировки его с.
Здесь, lambda x: x[0]
говорит groupby()
использовать первый объект в каждом кортеже как группирующийся ключ.
В вышеупомянутом for
оператор, groupby
возвраты три (ключ, итератор группы) пары - однажды для каждого уникального ключа. Можно использовать возвращенный итератор для итерации по каждому отдельному объекту в той группе.
Вот немного отличающийся пример с теми же данными, с помощью понимания списка:
for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join([thing[1] for thing in group])
print key + "s: " + listOfThings + "."
Это даст Вам вывод:
животные: перенос и утка.
заводы: кактус.
механизмы: скоростная моторная лодка и школьный автобус.
string path = HttpContext.Current.Server.MapPath("~/App_Data/somedata.xml");
string path = Server.MapPath("~/App_Data/somedata.xml");
Я стараюсь взять в привычку использовать HostingEnvironment
вместо Server
, поскольку это работает и в контексте WCF-сервисов.
HostingEnvironment.MapPath(@"~/App_Data/PriceModels.xml");