SORU
3 AĞUSTOS 2008, Pazar


Nasıl Python'In itertools.() groupby?

Aslında Python 3 ** işlevi nasıl anlaşılır bir açıklama bulmak mümkün olmamıştır. Yapmaya çalıştığım şey şu:

  • Bir liste - bu durumda, lxml objektif bir unsur çocuklar
  • Gruplar bazı ölçütlere göre parçalara ayırın
  • Daha sonra bu grupların her biri ayrı ayrı üzerinde yineleme.

* *9, the examples, inceledim ama sorun numaraları basit bir liste ötesinde onları uygulamak için çalışmakla geçirdim.

Nasıl itertools.groupby() kullanabilirim? Kullanılması gereken başka bir yöntem var mı? İyi işaretçiler "ön koşul" da mutluluk duyacağız okuma.

CEVAP
10 AĞUSTOS 2008, Pazar


Birkaç deneyden sonra, benim zihinsel blok üstesinden geldim. Geriye dönüp bakıldığında, her şey apaçık ortada, ama Yığın Taşması ruhu içinde, burada öğrendim.

Sebastjan dediği gibi**ilk verileri sıralamak için. Bu çok önemli.**

Benim anlamadığım kısım bu örnekte inşaat

groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
   groups.append(list(g))    # Store group iterator as a list
   uniquekeys.append(k)
<>"" mevcut gruplandırma anahtar, ve "g" grubu bu grup anahtarı tarafından tanımlanan ispat için kullanabileceğiniz bir özelliktir. k p Diğer bir deyişle, groupby kullanımına kendisi yineleyici döndürür. İşte buna bir örnek, daha net değişken adlarını kullanarak:

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 " "

Bu çıktıyı verecektir:

Bir ayı bir hayvandır.
Bir ördek bir hayvandır.

Bir kaktüs bitkidir.

Bir sürat teknesi bir araç.
Bir okul otobüsü bir araç.

"Şey" her başlığın ilk öğe ikinci öğe ait olduğu grup. dizilerini bir listedir bu örnekte, Groupby() fonksiyonu iki argüman alır: (1) veri grubu için ve (2) Bu grup için işlev. Burada, "lambda x: x[0]" groupby söyler() gruplama anahtarı gibi her başlığın ilk madde kullanmak.

""Deyimi, groupby verir üç (anahtar, grup yineleyici) çift - her benzersiz anahtar. ve son kez yukarıda Döndürülen yineleyici o gruptaki tek tek her öğe üzerinde yineleme için kullanabilirsiniz.

İşte aynı veri ile biraz daha farklı bir örnek, bir liste anlayışı kullanarak:

for key, group in groupby(things, lambda x: x[0]):
    listOfThings = " and ".join([thing[1] for thing in group])
    print key   "s:  "   listOfThings   "."

Bu çıktıyı verecektir:

hayvanlar: ayı ve ördek.
bitkiler: kaktüs.
araçları: sürat teknesi ve okul otobüsü.

Python oldukça serin, değil mi?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007
  • Visual Life

    Visual Life

    3 Temmuz 2006