Bir s├Âzl├╝─č├╝ de─čerine g├Âre nas─▒l s─▒ralar─▒m?


Al─▒nan cevaba git


Veritaban─▒ndaki iki alandan okunan de─čerler s├Âzl├╝─č├╝m var: bir dize alan─▒ ve say─▒sal bir alan. Dize alan─▒ benzersizdir, bu y├╝zden s├Âzl├╝─č├╝n anahtar─▒ budur.

Anahtarlar─▒ s─▒ralayabilirim, ancak de─čerleri temel alarak nas─▒l s─▒ralayabilirim?

Not: Burada Stack Overflow sorusunu okudum , s├Âzl├╝k listesini s├Âzl├╝k de─čerine g├Âre nas─▒l s─▒ralar─▒m? ve muhtemelen bir s├Âzl├╝k listesine sahip olmak i├žin kodumu de─či┼čtirebilirdim, ancak bir s├Âzl├╝k listesine ger├žekten ihtiyac─▒m olmad─▒─č─▒ndan, artan veya azalan d├╝zende s─▒ralamak i├žin daha basit bir ├ž├Âz├╝m olup olmad─▒─č─▒n─▒ bilmek istedim.


3425









Cevap say─▒s─▒n─▒ say: 30






Bir s├Âzl├╝k s─▒ralamak m├╝mk├╝n de─čildir, yaln─▒zca s─▒ralanan bir s├Âzl├╝─č├╝n temsilini almak m├╝mk├╝nd├╝r. S├Âzl├╝kler do─čal olarak s─▒ral─▒ de─čildir, ancak listeler ve tupler gibi di─čer t├╝rler de─čildir. Dolay─▒s─▒yla s─▒ral─▒ de─čerleri temsil etmek i├žin s─▒ral─▒ bir veri t├╝r├╝ne ihtiyac─▒n─▒z vard─▒r, ki bu liste olacakt─▒r - muhtemelen bir tuples listesi.

├ľrne─čin,

 import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
 

sorted_x Her bir b├Âl├╝mdeki ikinci elemana g├Âre s─▒ralanm─▒┼č bir trol listesi olacakt─▒r. dict(sorted_x) == x .

Ve de─čerleri yerine anahtarlar─▒ s─▒ralamak isteyenler i├žin:

 import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
 

Python3'te, ambalaj─▒n a├ž─▒lmas─▒na izin verilmedi─činden [1] kullanabiliriz.

 x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
 

├ç─▒kt─▒y─▒ bir dikme olarak istiyorsan─▒z, ┼čunlar─▒ kullanabilirsiniz collections.OrderedDict :

 import collections

sorted_dict = collections.OrderedDict(sorted_x)
 

4396







Kadar basit: sorted(dict1, key=dict1.get)

Asl─▒nda, bir "s├Âzl├╝k de─čerlerine g├Âre s─▒rala" yapmak m├╝mk├╝nd├╝r. Son zamanlarda bunu bir Code Golf'ta (Stack Overflow sorusu Code Golf: Word frekans tablosu ) yapmak zorunda kald─▒m . K─▒salt─▒lm─▒┼č, sorun t├╝rdendi: bir metin verildi─činde, her kelimenin ne s─▒kl─▒kta kar┼č─▒la┼čt─▒─č─▒n─▒ say─▒n ve s─▒kl─▒─č─▒ azaltarak s─▒ralanan en iyi kelimelerin bir listesini g├Âr├╝nt├╝leyin.

Anahtar kelimelerle ve her kelimenin de─čerlerini de─čer olarak i├žeren bir s├Âzl├╝k yaparsan─▒z, burada ┼č├Âyle basitle┼čtirilir:

 from collections import defaultdict
d = defaultdict(int)
for w in text.split():
  d[w] += 1
 

daha sonra, kullan─▒m s─▒kl─▒─č─▒na g├Âre s─▒ralanan kelimelerin bir listesini alabilirsiniz sorted(d, key=d.get) - s─▒ralama, kelime tu┼člar─▒ ├╝zerinde bir s─▒ralama tu┼ču olarak kullan─▒ld─▒─č─▒nda, s├Âzl├╝k tu┼člar─▒ ├╝zerinde yinelenir.

 for w in sorted(d, key=d.get, reverse=True):
  print w, d[w]
 

Bu ayr─▒nt─▒l─▒ a├ž─▒klamay─▒, insanlar─▒n "anahtar kelimeye g├Âre kolayca s├Âzl├╝k s─▒ralayabilirim, ancak de─čere g├Âre nas─▒l s─▒ralayabilirim" ile ne demek istediklerini g├Âstermek i├žin yaz─▒yorum - ve OP'nin b├Âyle bir sorunu ├ž├Âzmeye ├žal─▒┼čt─▒─č─▒n─▒ d├╝┼č├╝n├╝yorum. Ve ├ž├Âz├╝m, yukar─▒da g├Âsterildi─či gibi de─čerlere dayal─▒ olarak anahtarlar─▒n bir listesini yapmakt─▒r.


1139







Kullanabilirsin:

 sorted(d.items(), key=lambda x: x[1])
 

Bu, s├Âzl├╝─č├╝ s├Âzl├╝kteki her giri┼čin de─čerine g├Âre en k├╝├ž├╝─č├╝nden en b├╝y├╝─č├╝ne g├Âre s─▒ralar.

Azalan d├╝zende s─▒ralamak i├žin ┼čunu ekleyin reverse=True :

 sorted(d.items(), key=lambda x: x[1], reverse=True)
 

753


2010-02-13





Dicts s─▒ralanamaz, ancak onlardan s─▒ralanm─▒┼č bir liste olu┼čturabilirsiniz.

Bir dict de─čerleri listesi:

 sorted(d.values())
 

De─čerine g├Âre s─▒ralanan (anahtar, de─čer) ├žiftlerin listesi:

 from operator import itemgetter
sorted(d.items(), key=itemgetter(1))
 

208







Son Python 2.7'de, ├Â─čelerin eklendi─či s─▒ray─▒ hat─▒rlayan yeni OrderedDict t├╝r├╝m├╝z var .

 >>> d = {"third": 3, "first": 1, "fourth": 4, "second": 2}

>>> for k, v in d.items():
...     print "%s: %s" % (k, v)
...
second: 2
fourth: 4
third: 3
first: 1

>>> d
{'second': 2, 'fourth': 4, 'third': 3, 'first': 1}
 

Orijinalden sipari┼č edilen yeni bir s├Âzl├╝k olu┼čturmak i├žin de─čerlere g├Âre s─▒ralay─▒n:

 >>> from collections import OrderedDict
>>> d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
 

OrderedDict normal bir dict gibi davran─▒r:

 >>> for k, v in d_sorted_by_value.items():
...     print "%s: %s" % (k, v)
...
first: 1
second: 2
third: 3
fourth: 4

>>> d_sorted_by_value
OrderedDict([('first': 1), ('second': 2), ('third': 3), ('fourth': 4)])
 

155







G├ťNCELLEME: 5 ARALIK 2015 Python 3.5 kullanarak

Kabul edilen cevab─▒ yararl─▒ bulmama ra─čmen , standart k├╝t├╝phane koleksiyonlar─▒ mod├╝l├╝nden OrderedDict'e tam da bu t├╝r bir sorunu ├ž├Âzmek i├žin tasarlanm─▒┼č, uygulanabilir, modern bir alternatif olarak referans verilmedi─či i├žin ┼ča┼č─▒rd─▒m .

 from operator import itemgetter
from collections import OrderedDict

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = OrderedDict(sorted(x.items(), key=itemgetter(1)))
# OrderedDict([(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)])
 

Resmi OrderedDict belgeleri de ├žok benzer bir ├Ârnek sunuyor, ancak s─▒ralama i┼člevi i├žin bir lambda kullan─▒yor:

 # regular unsorted dictionary
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

# dictionary sorted by value
OrderedDict(sorted(d.items(), key=lambda t: t[1]))
# OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
 

96







Hank Gay'in cevab─▒yla hemen hemen ayn─▒ :

 sorted([(value,key) for (key,value) in mydict.items()])
 

Veya John Fouhy taraf─▒ndan ├Ânerildi─či gibi hafif├že optimize edilmi┼č:

 sorted((value,key) for (key,value) in mydict.items())
 

74







Adland─▒r─▒lm─▒┼č dosya kullanmak genellikle ├žok kullan─▒┼čl─▒ olabilir . ├ľrne─čin, anahtar olarak 'isim' s├Âzl├╝─č├╝ne ve de─čer olarak 'puan' s├Âzl├╝─č├╝ne sahipsiniz ve 'puan' s─▒ralamas─▒n─▒ yapmak istiyorsan─▒z:

 import collections
Player = collections.namedtuple('Player', 'score name')
d = {'John':5, 'Alex':10, 'Richard': 7}
 

ilk ├Ânce en d├╝┼č├╝k puanla s─▒ralama:

 worst = sorted(Player(v,k) for (k,v) in d.items())
 

ilk ├Ânce en y├╝ksek puanla s─▒ralama:

 best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
 

┼×imdi ismini ve puan─▒n─▒ alabilirsiniz, diyelim ki en iyi ikinci oyuncu (index = 1) Pythonically ┼č├Âyle:

 player = best[1]
player.name
    'Richard'
player.score
    7
 

71


2011-08-30





─░tibariyle Python 3.6 yerle┼čik dict s─▒ralan─▒r

─░yi haber, bu nedenle OP'nin orijinal e┼čleme ├žiftleri bir veritaban─▒ndan anahtarlar ve dahili bir Python v3.6 + dict i├žerisindeki de─čerler gibi say─▒sal de─čerler olan bir veritaban─▒ndan al─▒nan e┼čleme kullan─▒m durumu ┼čimdi ekleme s─▒ras─▒na uymal─▒d─▒r.

Sonu├žta ortaya ├ž─▒kan iki s├╝tun tablosu ifadesinin a┼ča─č─▒daki gibi bir veritaban─▒ sorgusundan ├ž─▒kar─▒lmas─▒:

 SELECT a_key, a_value FROM a_table ORDER BY a_value;
 

iki Python tuplesinde k_seq ve v_seq (n├╝merik indeks ile s─▒ral─▒ ve ayn─▒ uzunluktaki parkurlarla) depolanacak, sonra:

 k_seq = ('foo', 'bar', 'baz')
v_seq = (0, 1, 42)
ordered_map = dict(zip(k_seq, v_seq))
 

Daha sonra ├ž─▒kt─▒ verilmesine izin ver:

 for k, v in ordered_map.items():
    print(k, v)
 

Bu durumda verimli (yeni Python 3.6+ yerle┼čik dict i├žin!):

 foo 0
bar 1
baz 42
 

v de─čeri ba┼č─▒na ayn─▒ s─▒rada

Makineme Python 3.5 kurulumunda ┼ču anda elde edilen ├╝r├╝n:

 bar 1
foo 0
baz 42
 

Detaylar:

2012 y─▒l─▒nda Raymond Hettinger taraf─▒ndan ├Ânerilen ( "daha h─▒zl─▒ yinelemeli daha kompakt s├Âzl├╝kler" konulu python-dev ile ilgili e-posta ) ve ┼čimdi (2016'da) Victor Stinner taraf─▒ndan konuyla bir python-dev e-posta ile ilan edilen "Python 3.6 dict olur Kompakt ve ├Âzel bir s├╝r├╝m al─▒r ve anahtar kelimeler "sipari┼čin d├╝zeltilmesi / uygulanmas─▒ nedeniyle 27350 " Kompakt ve sipari┼č edilen dikt " nedeniyle, Python 3.6'da ┼čimdi ek sipari┼či sa─člamak i├žin yerle┼čik bir dikte kullanmak m├╝mk├╝n olacak !!

Umar─▒m bu ilk ad─▒m olarak ince bir OrderedDict uygulamas─▒na yol a├žacakt─▒r. @ JimFasarakis-Hilliard'─▒n belirtti─či gibi, baz─▒lar─▒ gelecekte OrderedDict tipi i├žin kullan─▒m durumlar─▒n─▒ da g├Âr├╝yor. Python toplulu─čunun, zaman─▒n testine dayan─▒p dayanmayaca─č─▒n─▒ ve bir sonraki ad─▒mlar─▒n ne olaca─č─▒n─▒, dikkatlice inceleyece─čini d├╝┼č├╝n├╝yorum.

Kararl─▒ s─▒ralaman─▒n a├žt─▒─č─▒ olanaklar─▒ ka├ž─▒rmamak i├žin kodlama al─▒┼čkanl─▒klar─▒m─▒z─▒ yeniden g├Âzden ge├žirme zaman─▒:

  • Anahtar s├Âzc├╝k arg├╝manlar─▒ ve
  • (orta) dikt depolama

Birincisi, baz─▒ durumlarda i┼člevlerin ve y├Ântemlerin uygulanmas─▒nda g├Ânderimi kolayla┼čt─▒rd─▒─č─▒ i├žin.

─░kincisi, dict boru hatlar─▒n─▒n i┼členmesinde ara depo olarak daha kolay kullan─▒lmas─▒n─▒ te┼čvik etti─či i├žin .

Raymond Hettinger , San Francisco Python Meetup Group 2016-DEC-08 sunumundan " Python 3.6 S├Âzl├╝klerin Arkas─▒ndaki Teknoloji " yi a├ž─▒klayan belgeler sunmu┼čtur .

Ve belki de bir miktar Overflow ta┼čmas─▒ ile s├╝slenmi┼č bir soru ve cevap sayfas─▒ bu bilginin bir ├že┼čidini alacakt─▒r ve bir├žok y├╝ksek kaliteli cevap s├╝r├╝m ba┼č─▒na bir g├╝ncelleme gerektirecektir.

Caveat Emptor (ayr─▒ca 2017-12-15 g├╝ncellemesine bak─▒n─▒z):

@ Ajcr'nin hakl─▒ olarak belirtti─či gibi: "Bu yeni uygulaman─▒n d├╝zenini koruyan y├Ân├╝, bir uygulama detay─▒ olarak kabul edilir ve g├╝venilmemelidir." ( whatsnew36'dan itibaren ) nit toplama de─čil, fakat al─▒nt─▒ biraz karamsar kesildi ;-). Devam ediyor "(gelecekte de─či┼čebilir, ancak t├╝m yeni ve gelecekteki Python uygulamalar─▒ i├žin sipari┼či koruma anlambilimini zorunlu k─▒lmak ├╝zere dili de─či┼čtirmeden ├Ânce bu yeni dikt uygulamas─▒n─▒n bir ka├ž s├╝r├╝m i├žin dilde yap─▒lmas─▒ istenmektedir; rastgele yineleme s─▒ras─▒n─▒n hala y├╝r├╝rl├╝kte oldu─ču dilin eski s├╝r├╝mleriyle geriye d├Ân├╝k uyumlulu─čun korunmas─▒na yard─▒mc─▒ olur, ├Ârne─čin Python 3.5). ÔÇŁ

Baz─▒ insan dillerinde oldu─ču gibi (├Ârne─čin Almanca), kullan─▒m dili ┼čekillendiriyor ve ┼čimdi de irade 36'da ilan edildi .

G├╝ncelleme 2017-12-15:

Python-dev listesine g├Ânderilen bir e-postada , Guido van Rossum ┼čunlar─▒ s├Âyledi:

├ľyleyse yap. "Dict yerle┼čtirme s─▒ras─▒n─▒ tutar" karar─▒d─▒r. Te┼čekk├╝rler!

Bu nedenle, 3.6 CPython s├╝r├╝m├╝, dikt yerle┼čtirme s─▒ralamas─▒n─▒n yan etkisi art─▒k dil spesifikasyonunun bir par├žas─▒ haline geliyor (art─▒k sadece bir uygulama detay─▒ de─čil). Bu posta ipli─či ayr─▒ca, collections.OrderedDict tart─▒┼čma s─▒ras─▒nda Raymond Hettinger taraf─▒ndan hat─▒rlat─▒ld─▒─č─▒ gibi, baz─▒ ay─▒rt edici tasar─▒m hedefleri ile y├╝z y├╝ze geldi.


69







Ben de ayn─▒ problemi ya┼čad─▒m ve ┼č├Âyle ├ž├Âzd├╝m:

 WantedOutput = sorted(MyDict, key=lambda x : MyDict[x]) 
 

("Bir siperi s─▒ralamak m├╝mk├╝n de─čil" cevab─▒n─▒ verenler) soruyu okumad─▒lar! Asl─▒nda, "Anahtarlar─▒ s─▒ralayabilirim, ama de─čerleri temel alarak nas─▒l s─▒ralayabilirim?" tu┼člar─▒ de─čerlerinin de─čerine g├Âre s─▒ralan─▒r.)

L├╝tfen s─▒ran─▒n iyi tan─▒mlanmad─▒─č─▒na dikkat edin (ayn─▒ de─čere sahip anahtarlar ├ž─▒k─▒┼č listesinde iste─če ba─čl─▒ bir s─▒rada olacakt─▒r).


40







Python 2.7ÔÇÖde a┼ča─č─▒dakileri yap─▒n:

 from collections import OrderedDict
# regular unsorted dictionary
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

# dictionary sorted by value
OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
 

kopyala-yap─▒┼čt─▒r: http://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes

Keyfini ├ž─▒kar─▒n ;-)


34







De─čerler say─▒sal Counter ise koleksiyonlardan da kullanabilirsiniz .

 from collections import Counter

x = {'hello': 1, 'python': 5, 'world': 3}
c = Counter(x)
print(c.most_common())

>> [('python', 5), ('world', 3), ('hello', 1)]    
 

27







Bu kod:

 import operator
origin_list = [
    {"name": "foo", "rank": 0, "rofl": 20000},
    {"name": "Silly", "rank": 15, "rofl": 1000},
    {"name": "Baa", "rank": 300, "rofl": 20},
    {"name": "Zoo", "rank": 10, "rofl": 200},
    {"name": "Penguin", "rank": -1, "rofl": 10000}
]
print ">> Original >>"
for foo in origin_list:
    print foo

print "\n>> Rofl sort >>"
for foo in sorted(origin_list, key=operator.itemgetter("rofl")):
    print foo

print "\n>> Rank sort >>"
for foo in sorted(origin_list, key=operator.itemgetter("rank")):
    print foo
 

Sonu├žlar burada:

orijinal

 {'name': 'foo', 'rank': 0, 'rofl': 20000}
{'name': 'Silly', 'rank': 15, 'rofl': 1000}
{'name': 'Baa', 'rank': 300, 'rofl': 20}
{'name': 'Zoo', 'rank': 10, 'rofl': 200}
{'name': 'Penguin', 'rank': -1, 'rofl': 10000}
 

rofl

 {'name': 'Baa', 'rank': 300, 'rofl': 20}
{'name': 'Zoo', 'rank': 10, 'rofl': 200}
{'name': 'Silly', 'rank': 15, 'rofl': 1000}
{'name': 'Penguin', 'rank': -1, 'rofl': 10000}
{'name': 'foo', 'rank': 0, 'rofl': 20000}
 

r├╝tbe

 {'name': 'Penguin', 'rank': -1, 'rofl': 10000}
{'name': 'foo', 'rank': 0, 'rofl': 20000}
{'name': 'Zoo', 'rank': 10, 'rofl': 200}
{'name': 'Silly', 'rank': 15, 'rofl': 1000}
{'name': 'Baa', 'rank': 300, 'rofl': 20}
 

25







A┼ča─č─▒daki yakla┼č─▒m─▒ deneyin. A┼ča─č─▒daki verilerle mydict adl─▒ bir s├Âzl├╝k tan─▒mlayal─▒m:

 mydict = {'carl':40,
          'alan':2,
          'bob':1,
          'danny':3}
 

E─čer biri s├Âzl├╝─č├╝ tu┼člar─▒na g├Âre s─▒ralamak isterse, ┼č├Âyle bir ┼čey yapabilir:

 for key in sorted(mydict.iterkeys()):
    print "%s: %s" % (key, mydict[key])
 

Bu, a┼ča─č─▒daki ├ž─▒kt─▒y─▒ d├Ând├╝rmelidir:

 alan: 2
bob: 1
carl: 40
danny: 3
 

Di─čer taraftan, e─čer bir s├Âzl├╝k (de─čerde soruldu─ču gibi) de─čerine g├Âre s─▒ralamak istiyorsa, a┼ča─č─▒dakiler yap─▒labilir:

 for key, value in sorted(mydict.iteritems(), key=lambda (k,v): (v,k)):
    print "%s: %s" % (key, value)
 

Bu komutun sonucu (s├Âzl├╝─č├╝ de─čerine g├Âre s─▒ralamak) a┼ča─č─▒dakileri d├Ând├╝rmelidir:

 bob: 1
alan: 2
danny: 3
carl: 40
 

23







Ayr─▒ca "ters bir dizin" olu┼čturabilirsiniz.

 from collections import defaultdict
inverse= defaultdict( list )
for k, v in originalDict.items():
    inverse[v].append( k )
 

┼×imdi tersiniz de─čerlere sahip; Her de─čerin ge├žerli anahtarlar─▒n bir listesi vard─▒r.

 for k in sorted(inverse):
    print k, inverse[k]
 

21







Koleksiyonlar─▒ kullanabilirsiniz . Not, bu hem say─▒sal hem de say─▒sal olmayan de─čerler i├žin i┼če yarayacakt─▒r.

 >>> x = {1: 2, 3: 4, 4:3, 2:1, 0:0}
>>> from collections import Counter
>>> #To sort in reverse order
>>> Counter(x).most_common()
[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]
>>> #To sort in ascending order
>>> Counter(x).most_common()[::-1]
[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]
>>> #To get a dictionary sorted by values
>>> from collections import OrderedDict
>>> OrderedDict(Counter(x).most_common()[::-1])
OrderedDict([(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)])
 

20







Python 3.6'dan ba┼člayarak, dict nesneler ┼čimdi yerle┼čtirme s─▒ras─▒na g├Âre s─▒ralanm─▒┼čt─▒r. Resmen Python 3.7'nin ├Âzelliklerinde.

 >>> words = {"python": 2, "blah": 4, "alice": 3}
>>> dict(sorted(words.items(), key=lambda x: x[1]))
{'python': 2, 'alice': 3, 'blah': 4}
 

Ondan ├Ânce kullanmak zorundayd─▒n OrderedDict .

Python 3.7 dok├╝mantasyonu ┼č├Âyle diyor:

3.7 s├╝r├╝m├╝nde de─či┼čtirildi: S├Âzl├╝k sipari┼č ekleme talimat─▒ olarak garanti edilir. Bu davran─▒┼č CPython'un 3.6.


18







Daimi de─čere g├Âre s─▒ralanm─▒┼č bir s├Âzl├╝k olan bir atlama diktini kullanabilirsiniz .

 >>> data = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> SkipDict(data)
{0: 0.0, 2: 1.0, 1: 2.0, 4: 3.0, 3: 4.0}
 

E─čer kullan─▒rsan─▒z keys() , values() ya items() o zaman de─čeriyle s─▒ralanm─▒┼č s─▒rayla yineleme edece─čiz.

Atlama listesi veri yap─▒s─▒ kullan─▒larak uygulan─▒r .


15







 from django.utils.datastructures import SortedDict

def sortedDictByKey(self,data):
    """Sorted dictionary order by key"""
    sortedDict = SortedDict()
    if data:
        if isinstance(data, dict):
            sortedKey = sorted(data.keys())
            for k in sortedKey:
                sortedDict[k] = data[k]
    return sortedDict
 

13







Ayr─▒ca, tu┼ča iletilebilecek ├Âzel i┼člevi de kullanabilirsiniz.

 def dict_val(x):
    return x[1]
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=dict_val)
 

12







Dilettant'─▒n belirtti─či gibi Python 3.6 ┼čimdi emri yerine getirecek ! Bir yinelemenin s─▒ralamas─▒n─▒ kolayla┼čt─▒ran yazd─▒─č─▒m bir i┼člevi payla┼čaca─č─▒m─▒ d├╝┼č├╝nd├╝m (demet, liste, dikt). ─░kinci durumda, tu┼člar─▒ veya de─čerleri s─▒ralayabilirsiniz ve say─▒sal kar┼č─▒la┼čt─▒rmay─▒ hesaba katabilirsiniz. Sadece> = 3.6!

├ľrne─čin dizeleri ve in├žleri de i├žeren bir yinelemeli diziyi kullanmay─▒ denedi─činizde, sort () ba┼čar─▒s─▒z olur. Elbette string kar┼č─▒la┼čt─▒rmas─▒n─▒ str () ile zorlayabilirsiniz. Bununla birlikte, baz─▒ durumlarda ger├žek say─▒sal kar┼č─▒la┼čt─▒rma yapmak istedi─činizden 12 k├╝├ž├╝kt├╝r 20 (dize kar┼č─▒la┼čt─▒rmas─▒nda durum b├Âyle de─čildir). Bu y├╝zden a┼ča─č─▒daki geldi. A├ž─▒k say─▒sal kar┼č─▒la┼čt─▒rma yapmak istedi─činizde, num_as_num t├╝m de─čerleri kayan noktalara d├Ân├╝┼čt├╝rmeye ├žal─▒┼čarak a├ž─▒k say─▒sal s─▒ralama yapmaya ├žal─▒┼čan bayrak kullanabilirsiniz . Bu ba┼čar─▒l─▒ olursa, say─▒sal s─▒ralama yapar, aksi takdirde dize kar┼č─▒la┼čt─▒rmas─▒na ba┼čvurur.

─░yile┼čtirme veya itme istekleri i├žin yorumlar─▒n─▒z─▒ bekliyoruz.

 def sort_iterable(iterable, sort_on=None, reverse=False, num_as_num=False):
    def _sort(i):
      # sort by 0 = keys, 1 values, None for lists and tuples
      try:
        if num_as_num:
          if i is None:
            _sorted = sorted(iterable, key=lambda v: float(v), reverse=reverse)
          else:
            _sorted = dict(sorted(iterable.items(), key=lambda v: float(v[i]), reverse=reverse))
        else:
          raise TypeError
      except (TypeError, ValueError):
        if i is None:
          _sorted = sorted(iterable, key=lambda v: str(v), reverse=reverse)
        else:
          _sorted = dict(sorted(iterable.items(), key=lambda v: str(v[i]), reverse=reverse))

      return _sorted

    if isinstance(iterable, list):
      sorted_list = _sort(None)
      return sorted_list
    elif isinstance(iterable, tuple):
      sorted_list = tuple(_sort(None))
      return sorted_list
    elif isinstance(iterable, dict):
      if sort_on == 'keys':
        sorted_dict = _sort(0)
        return sorted_dict
      elif sort_on == 'values':
        sorted_dict = _sort(1)
        return sorted_dict
      elif sort_on is not None:
        raise ValueError(f"Unexpected value {sort_on} for sort_on. When sorting a dict, use key or values")
    else:
      raise TypeError(f"Unexpected type {type(iterable)} for iterable. Expected a list, tuple, or dict")
 

10







─░┼čte zip kullanarak d.values() ve d.keys() ├╝zerinde bir ├ž├Âz├╝md├╝r . Bu ba─člant─▒ya birka├ž sat─▒r (S├Âzl├╝k g├Âr├╝n├╝m nesnelerinde):

Bu, zip (): pairs = zip (d.values ÔÇőÔÇő(), d.keys ()) kullanarak (de─čer, anahtar) ├žiftlerinin olu┼čturulmas─▒na izin verir.

B├Âylece a┼ča─č─▒dakileri yapabiliriz:

 d = {'key1': 874.7, 'key2': 5, 'key3': 8.1}

d_sorted = sorted(zip(d.values(), d.keys()))

print d_sorted 
# prints: [(5, 'key2'), (8.1, 'key3'), (874.7, 'key1')]
 

9







Kullan─▒m ValueSortedDict gelen dicts :

 from dicts.sorteddict import ValueSortedDict
d = {1: 2, 3: 4, 4:3, 2:1, 0:0}
sorted_dict = ValueSortedDict(d)
print sorted_dict.items() 

[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]
 

7







Bir dikte boyunca yineleyin ve azalan s─▒rayla de─čerlerine g├Âre s─▒ralay─▒n:

 $ python --version
Python 3.2.2

$ cat sort_dict_by_val_desc.py 
dictionary = dict(siis = 1, sana = 2, joka = 3, tuli = 4, aina = 5)
for word in sorted(dictionary, key=dictionary.get, reverse=True):
  print(word, dictionary[word])

$ python sort_dict_by_val_desc.py 
aina 5
tuli 4
joka 3
sana 2
siis 1
 

6







De─čerleriniz tamsay─▒larsa ve Python 2.7 veya daha yenisini kullan─▒yorsan─▒z, collections.Counter yerine kullanabilirsiniz dict . Bu most_common y├Ântem, de─čere g├Âre s─▒ralanm─▒┼č t├╝m ├Â─čeleri size verecektir.


6







Python'dan Herkese uygun bir beceri ├Â─črendim .

S├Âzl├╝─č├╝ s─▒ralaman─▒za yard─▒mc─▒ olmas─▒ i├žin ge├žici bir liste kullanabilirsiniz:

 #Assume dictionary to be:
d = {'apple': 500.1, 'banana': 1500.2, 'orange': 1.0, 'pineapple': 789.0}

# create a temporary list
tmp = []

# iterate through the dictionary and append each tuple into the temporary list 
for key, value in d.items():
    tmptuple = (value, key)
    tmp.append(tmptuple)

# sort the list in ascending order
tmp = sorted(tmp)

print (tmp)
 

Listeyi azalan d├╝zende s─▒ralamak istiyorsan─▒z, orijinal s─▒ralama ├žizgisini ┼ču ┼čekilde de─či┼čtirin:

 tmp = sorted(tmp, reverse=True)
 

Liste anlama kullanarak, bir astar olacakt─▒r:

 #Assuming the dictionary looks like
d = {'apple': 500.1, 'banana': 1500.2, 'orange': 1.0, 'pineapple': 789.0}
#One liner for sorting in ascending order
print (sorted([(v, k) for k, v in d.items()]))
#One liner for sorting in descending order
print (sorted([(v, k) for k, v in d.items()], reverse=True))
 

├ľrnek ├ž─▒kt─▒:

 #Asending order
[(1.0, 'orange'), (500.1, 'apple'), (789.0, 'pineapple'), (1500.2, 'banana')]
#Descending order
[(1500.2, 'banana'), (789.0, 'pineapple'), (500.1, 'apple'), (1.0, 'orange')]
 

6







Elbette, unutmay─▒n, kullanman─▒z gerekir, OrderedDict ├ž├╝nk├╝ d├╝zenli Python s├Âzl├╝kleri orijinal d├╝zeni tutmaz.

 from collections import OrderedDict
a = OrderedDict(sorted(originalDict.items(), key=lambda x: x[1]))
 

Python 2.7 veya daha y├╝ksek bir s├╝r├╝m├╝n├╝z yoksa, yapabilece─činiz en iyi ┼čey bir jenerat├Âr fonksiyonundaki de─čerler ├╝zerinde yineleme yapmakt─▒r. (Burada OrderedDict 2.4 ve 2.6 i├žin bir var , ancak

a) Ne kadar iyi ├žal─▒┼čt─▒─č─▒n─▒ bilmiyorum

ve

b) Tabii ki indirmeniz ve y├╝klemeniz gerekir. Y├Ânetici eri┼čiminiz yoksa, se├žene─čin d─▒┼č─▒nda kalmas─▒ndan korkuyorum.)


 def gen(originalDict):
    for x, y in sorted(zip(originalDict.keys(), originalDict.values()), key=lambda z: z[1]):
        yield (x, y)
    #Yields as a tuple with (key, value). You can iterate with conditional clauses to get what you want. 

for bleh, meh in gen(myDict):
    if bleh == "foo":
        print(myDict[bleh])
 

Ayr─▒ca her de─čeri yazd─▒rabilirsiniz

 for bleh, meh in gen(myDict):
    print(bleh, meh)
 

L├╝tfen Python 3.0 veya daha ├╝st├╝n├╝ kullanm─▒yorsan─▒z, yazd─▒rd─▒ktan sonra parantezleri ├ž─▒karmay─▒ unutmay─▒n.


6







Bu 3.1.x'de ├žal─▒┼č─▒r:

 import operator
slovar_sorted=sorted(slovar.items(), key=operator.itemgetter(1), reverse=True)
print(slovar_sorted)
 

5







B├╝t├╝nl├╝─č├╝ u─čruna, heapq kullanarak bir ├ž├Âz├╝m g├Ânderiyorum . Not, bu y├Ântem hem say─▒sal hem de say─▒sal olmayan de─čerler i├žin ├žal─▒┼čacakt─▒r.

 >>> x = {1: 2, 3: 4, 4:3, 2:1, 0:0}
>>> x_items = x.items()
>>> heapq.heapify(x_items)
>>> #To sort in reverse order
>>> heapq.nlargest(len(x_items),x_items, operator.itemgetter(1))
[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]
>>> #To sort in ascending order
>>> heapq.nsmallest(len(x_items),x_items, operator.itemgetter(1))
[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]
 

5







Python'un eski s├╝r├╝mleriyle geriye d├Ân├╝k uyumlulu─ču muhafaza etme gereklilikleri nedeniyle OrderedDict ├ž├Âz├╝m├╝n├╝n ├žok ak─▒ll─▒ca oldu─čunu d├╝┼č├╝n├╝yorum. Python 2.7 ve daha eski s├╝r├╝mlerle ├žal─▒┼čan bir ┼čey istiyorsunuz.

Ancak ba┼čka bir cevapta belirtilen koleksiyon ├ž├Âz├╝m├╝ kesinlikle m├╝kemmel, ├ž├╝nk├╝ s├Âzl├╝kler i├žin son derece ├Ânemli olan anahtar ve de─čer aras─▒ndaki ba─člant─▒y─▒ yeniden ele al─▒yorsunuz.

Ba┼čka bir cevapta sunulan bir numaral─▒ tercihle ayn─▒ fikirde de─čilim, ├ž├╝nk├╝ anahtarlar─▒ at─▒yor.

Yukar─▒da belirtilen ├ž├Âz├╝m├╝ kulland─▒m (a┼ča─č─▒da g├Âsterilen kod) ve hem anahtarlara hem de de─čerlere eri┼čimi korudum ve benim durumumda s─▒ralamalar de─čerler ├╝zerindeydi, ancak de─čerleri s─▒ralad─▒ktan sonra anahtarlar─▒n s─▒ralamas─▒ ├Ânemliydi.

 from collections import Counter

x = {'hello':1, 'python':5, 'world':3}
c=Counter(x)
print c.most_common()


>> [('python', 5), ('world', 3), ('hello', 1)]
 

5



─░lgili yay─▒nlar


Bir i┼člevden birden ├žok de─čeri nas─▒l d├Ând├╝r├╝r├╝m? [kapal─▒]

JavaScript kullanarak metin giri┼č alan─▒n─▒n de─čerini nas─▒l alabilirim?

Bir s├Âzl├╝─č├╝ de─čere g├Âre nas─▒l s─▒ralars─▒n─▒z?

NA de─čerlerini bir R veri ├žer├ževesinde s─▒f─▒rlarla nas─▒l de─či┼čtiririm?

ViewPager'da parmakla kayd─▒rarak sayfalamay─▒ nas─▒l devre d─▒┼č─▒ b─▒rakabilirsiniz, ancak yine de programatik olarak kayd─▒rabilir?

HashMapÔÇÖi de─čerlere g├Âre s─▒ralama [duplicate]

S├Âzl├╝─č├╝ tu┼člar─▒na g├Âre s─▒rala

Saya├ž de─čerine g├Âre nas─▒l s─▒ralan─▒r? - piton

JavaScript: Nesneyi de─čere g├Âre nas─▒l iletirim?

dict de─čerini python'a g├Âre s─▒ralay─▒n [duplicate]

Etiketle ilgili di─čer sorular [python]


Python s├Âzl├╝klerinde 'has_key ()' veya 'in' kullanmal─▒ m─▒y─▒m?

Java 8'deki map ve flatMap y├Ântemleri aras─▒ndaki fark nedir?

Std :: move () nedir ve ne zaman kullan─▒lmal─▒d─▒r?

JavaScript Nesne M├╝lkiyet Sipari┼čini Garantiliyor mu?

Kenarl─▒k div i├žine yerle┼čtirilir, kenar─▒na yerle┼čtirilmez

heroku - t├╝m k├╝t├╝kleri g├Ârmek

MEAN.js ve MEAN.io aras─▒ndaki fark

ÔÇťGit --bare initÔÇŁ deposunu nas─▒l kullan─▒yorsunuz?

OnActivityResult i├žinde yanl─▒┼č requestCode

'─░nput' ├Â─česinin bilinen bir ├Âzelli─či olmad─▒─č─▒ i├žin 'formControl' ile ba─člant─▒ kurulam─▒yor - angular2 material Otomatik tamamlama sorunu