SORU
16 Mayıs 2010, Pazar


Python: Filtre sözlük

Puan bir sözlük var, dediler

>>> points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}

Yani 5'ten küçük olan tüm noktaları ile yeni bir sözlük noktaları oluşturmak istiyorum 'a', 'b' ve ''. d

** 16, her sözlüğe göre (key, pair) demet listesini döndüren items() fonksiyon:

>>> points.items()
[('a', (3, 4)), ('c', (5, 5)), ('b', (1, 2)), ('d', (3, 3))]

Bu yazdım:

>>> for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
...     points_small[item[0]]=item[1]
...
>>> points_small
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}

Daha zarif bir yolu var mı? Python süper dictionary.filter(f) bazı işlev bekliyordum...

Adam

CEVAP
16 Mayıs 2010, Pazar


dict((k, v) for k, v in points.items() if all(x < 5 for x in v))

Eğer Python 2'de iseniz .items() yerine .iteritems() Ara seçebilir ve points olabilirçokgirdiler.

all(x < 5 for x in v) olabilir overkill eğer emin her nokta daima yanında olacağım 2D sadece (bu durumda olabileceğini ifade aynı kısıtlama ile bir and) ama işe yarayacak güzel;-).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011
  • The Bad Tutorials

    The Bad Tuto

    6 EKİM 2009
  • The Verge

    The Verge

    8 AĞUSTOS 2006