යතුරකින් ශබ්ද කෝෂයක් වර්ග කරන්නේ කෙසේද?


977

සිට යාමට හොඳ ක්‍රමයක් {2:3, 1:89, 4:5, 3:0}වන්නේ {1:89, 2:3, 3:0, 4:5}කුමක්ද?
මම සමහර පෝස්ට් පරික්ෂා කළ නමුත් ඒවා සියල්ලම භාවිතා කරන්නේ "වර්ග කළ" ක්‍රියාකරු ය.


41
ශබ්දකෝෂ සහජයෙන්ම වර්ග කර නොමැත. ශබ්දකෝෂය ප්‍රදර්ශනය කිරීම තවත් කාරණයකි. කෙසේ වෙතත්, ඔබට එය වර්ග කිරීමට ඇත්තටම අවශ්‍ය වන්නේ කුමක්ද?
කාල් නෙක්ටෙල්

16
ශබ්ද කෝෂ වර්ග කර නැත. ඔවුන් එසේ නොවේ. ඔබට මූලද්‍රව්‍යයන් අනුපිළිවෙලින් ගමන් කිරීමට අවශ්‍ය නම්, "යතුරු සඳහා වර්ග කිරීම (d.keys ())" වැනි වර්ග කිරීම භාවිතා කරමින් ඔබ පැවසූ දෙයක් කළ යුතුය. d යනු ඔබේ ශබ්ද කෝෂයේ නම යැයි උපකල්පනය කිරීම
රයන් හේනිං

4
ArKarlKnechtel - මගේ භාවිත නඩුව නම් මට ප්‍රාථමික මෙනුවක් ඇති CLI යෙදුමක් ඇති අතර මෙනු විකල්ප යතුරු ලෙස ශබ්දකෝෂයක ඇත. පරිශීලක සිහිබුද්ධිය සඳහා යතුරු අකාරාදී ලෙස පෙන්වීමට මම කැමතියි.
රැන්ඩි


5
දැන් නියෝග ඇණවුම් කර ඇත්තේ ඇතුළත් කිරීමේ අනුපිළිවෙලෙනි (පයිතන් 3.6+). පහත දැක්වෙන සමහර පිළිතුරු මෙය පෙන්වා දෙයි.
matiasg

Answers:


969

සම්මත පයිතන් ශබ්දකෝෂ අනුපිළිවෙලට නොමැත. ඔබ (යතුර, අගය) යුගල වර්ග කළද dict, ඇණවුම ආරක්ෂා වන අයුරින් ඒවා ගබඩා කිරීමට ඔබට නොහැකි වනු ඇත.

පහසුම ක්‍රමය නම් භාවිතා කිරීමයි OrderedDict, එමඟින් මූලද්‍රව්‍ය ඇතුළත් කර ඇති අනුපිළිවෙල සිහිපත් වේ:

In [1]: import collections

In [2]: d = {2:3, 1:89, 4:5, 3:0}

In [3]: od = collections.OrderedDict(sorted(d.items()))

In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])

මාර්ගය odමුද්‍රණය කර ඇති විට කමක් නැත; එය අපේක්ෂා කළ පරිදි ක්‍රියාත්මක වනු ඇත:

In [11]: od[1]
Out[11]: 89

In [12]: od[3]
Out[12]: 0

In [13]: for k, v in od.iteritems(): print k, v
   ....: 
1 89
2 3
3 0
4 5

පයිතන් 3

පයිතන් 3 භාවිතා කරන්නන් සඳහා, .items()ඒ වෙනුවට භාවිතා කළ යුත්තේ .iteritems():

In [13]: for k, v in od.items(): print(k, v)
   ....: 
1 89
2 3
3 0
4 5

1
මම මෙය භාවිතා කළ අතර එය ක්‍රියාත්මක වේ, මම අනුමාන කරන්නේ එහි වැඩි කේතයක් සහ අතිරික්තයක් ඇති නමුත් එම කාර්යය ඉටු කරයි, # අනුපිළිවෙලට නැති විධානය d = {2: 3, 1:89, 4: 5, 3: 0} orderDict = {} (d.iterkeys ()): orderDict [key] = d [key]
ඇන්ටනි

4
@achrysochoou: එය ක්‍රියාත්මක වූයේ නම්, එය වාසනාව නිසා විය යුතුය. ඔබට පවසා ඇති පරිදි, සාමාන්‍ය ශබ්දකෝෂවලට වර්ග කිරීමේ සංකල්පයක් නොමැත, ඔබ යතුරු වර්ග කර හෝ අහඹු ලෙස ලබා දුන්නද කමක් නැත.
රිකාඩෝ කෝර්ඩන්ස්

34
පයිතන් 3.7+ සඳහා:sorted_dict = dict(sorted(unsorted_dict.items()))
aksh1618

12
python 3.7+ ට පෙරනිමියෙන් ඇණවුම් කර ඇති බැවින් ඇණවුම් කළ යුතු නොවේ :-)
Aneuway

3
පයිතන් 3.7.4 අත්පොතෙන්: "ශබ්ද කෝෂයක කාර්ය සාධන ලැයිස්තුව ()) ශබ්දකෝෂයේ භාවිතා කරන සියලුම යතුරු ලැයිස්තුවක් ඇතුළත් කිරීමේ අනුපිළිවෙලට ලබා දෙයි". එබැවින් ඇතුළත් කිරීමේ අනුපිළිවෙල සංරක්ෂණය කර ඇති අතර අපට විශ්වාසය තැබිය හැකිය.
මොස්ටාෆා හැඩියන්

425

ශබ්ද කෝෂවලම ඇණවුම් කරන ලද අයිතම නොමැත, ඔබට ඒවා යම් අනුපිළිවෙලකට මුද්‍රණය කිරීමට අවශ්‍ය නම්, උදාහරණ කිහිපයක් මෙන්න:

පයිතන් 2.4 සහ ඊට ඉහළින්:

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

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

ලබා දෙයි:

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

(2.4 ට අඩු පයිතන් :)

keylist = mydict.keys()
keylist.sort()
for key in keylist:
    print "%s: %s" % (key, mydict[key])

මුලාශ්‍රය: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/


2
NPE හි පිළිතුරට අනුව ඔබට පයිතන් 2.4+ හි OrderDict භාවිතා කළ හැකිය
radtek

1
ඔබ අයිතම භාවිතා කරන්නේ නම් () ඔබට එය එසේ කළ හැකියfor key, value in sorted(mydict.items())"
beep_check

ශබ්ද කෝෂවලම එවැනි අයිතම ඇණවුම් කර නැත -> තවදුරටත් සත්‍ය නොවේ!
minexew

කෙසේද, ඔබට පැහැදිලි කළ හැකිද?
ජේම්ස්

208

සිට Python හි collectionsපුස්තකාල ප්රලේඛන :

>>> from collections import OrderedDict

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

>>> # dictionary sorted by key -- OrderedDict(sorted(d.items()) also works
>>> 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)])

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

5
නියමයි! යාලුවනේ ඔබ සඳහා (බැස යෑමට) ආපසු හැරවීමට අවශ්ය නම් ඔබ හුදෙක් එක් reverse=Trueඋදා:OrderedDict(sorted(d.items(), reverse=True, key=lambda t: t[0]))
benscabbia

1
PyCharm හි, මම කුමන ශබ්ද කෝෂයක් භාවිතා කළත්, මට සෑම විටම මෙම අනතුරු ඇඟවීම ලැබේ:Unexpected type(s): (List[str]) Possible types: (Mapping) (Iterable[Tuple[Any, Any]])
Euler_Salter

165

CPython / PyPy 3.6 සහ ඕනෑම පයිතන් 3.7 හෝ ඊට වැඩි නම් මෙය පහසුවෙන් කළ හැකිය:

>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}

5
එකම දේ ලිවීමේ තවත් ක්‍රමයක් වන්නේ අවබෝධය භාවිතා කිරීමයි: {key:d[key] for key in sorted(d.keys())}
flow2k

43

යතුරු වර්ග කළ අනුපිළිවෙලින් ස්වයංක්‍රීයව නඩත්තු කරන ශබ්ද කෝෂ ක්‍රියාත්මක කිරීම් සපයන පයිතන් මොඩියුල ගණනාවක් තිබේ. පිරිසිදු-පයිතන් සහ සී-සී වේගයෙන් ක්‍රියාත්මක කරන වර්ග කළ බහාලුම් මොඩියුලය සලකා බලන්න . එකිනෙකාට එරෙහිව මිණුම් සලකුණු කර ඇති වෙනත් ජනප්‍රිය විකල්ප සමඟ සැසඳීමේ කාර්ය සාධනයක් ද ඇත .

යතුරු / අගය යුගල නැවත එකතු කිරීමට සහ ඉවත් කිරීමට අවශ්‍ය නම් ඇණවුම් කරන ලද නියෝගයක් භාවිතා කිරීම ප්‍රමාණවත් නොවේ.

>>> from sortedcontainers import SortedDict
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> s = SortedDict(d)
>>> s.items()
[(1, 89), (2, 3), (3, 0), (4, 5)]

SortedDict වර්ගය සුචිගත කරන ලද ස්ථාන සොයා බැලීමට සහ බිල්ට් ඩික්ට් වර්ගය සමඟ කළ නොහැකි මකාදැමීමට සහය දක්වයි.

>>> s.iloc[-1]
4
>>> del s.iloc[2]
>>> s.keys()
SortedSet([1, 2, 4])

36

සරලවම:

d = {2:3, 1:89, 4:5, 3:0}
sd = sorted(d.items())

for k,v in sd:
    print k, v

ප්‍රතිදානය:

1 89
2 3
3 0
4 5

7
sdයනු ශබ්දකෝෂයක් නොව ටුපල් ලැයිස්තුවකි. (තවමත් ප්‍රයෝජනවත් වුවද.)
nischi

ඔබගේ මුද්‍රණ ප්‍රකාශයට () අවශ්‍ය බව මම විශ්වාස කරමි. print (k, v)
DenVog

24

අනෙක් අය සඳහන් කර ඇති පරිදි, ශබ්දකෝෂ සහජයෙන්ම අනුපිළිවෙලට නොමැත. කෙසේ වෙතත්, ගැටළුව හුදෙක් ඇණවුම් කරන ලද ශබ්දකෝෂයක් ප්‍රදර්ශනය කරන්නේ නම් , ඔබට මෙම __str__ක්‍රමය ශබ්දකෝෂ උප පංතියකින් අභිබවා යා හැකි අතර , මෙම ශබ්ද කෝෂ පන්තිය බිල්ඩින් වෙනුවට භාවිතා කරන්න dict. උදා.

class SortedDisplayDict(dict):
   def __str__(self):
       return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"


>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}

සටහන, යතුරු ගබඩා කර ඇති ආකාරය, ඔබ ඒවා නැවත කියවන විට ඒවා නැවත පැමිණේ print. පයිතන් කොන්සෝලය සමඟ හෝ ඒවා ප්‍රදර්ශනය කරන්නේ කෙසේද යන්න මෙයින් කිසිවක් වෙනස් නොවේ .


19

වෙනත් ක්‍රමයක් සොයා ගත්තා:

import json
print json.dumps(d, sort_keys = True)

යාවත්කාලීන කිරීම:
1. මෙය කැදැලි වස්තු ද වර්ග කරයි (ස්තූතියි an ඩැනියෙල් එෆ්).
2. පයිතන් ශබ්දකෝෂ අනුපිළිවෙලට සකස් කර ඇති බැවින් මෙය මුද්‍රණය කිරීම සඳහා සුදුසු වේ.


නමුත් මෙය අවශ්‍ය නොවන කැදැලි වස්තූන්ගේ යතුරු ද වර්ග කරයි.
ඩැනියෙල් එෆ්

මෙය ලැයිස්තුගත නොව ශබ්ද කෝෂ පමණක් බව සලකන්න, උදා: dict.keys () එය ලැයිස්තුවක් බැවින් වර්ග නොකරනු ඇත.
ඇන්ඩෲ


13

පයිතන් 3.6 ට පෙර පයිතන් ශබ්දකෝෂය අනුපිළිවෙලට සකස් කර නොමැත. පයිතන් 3.6 CPython ක්‍රියාත්මක කිරීමේදී ශබ්දකෝෂය ඇතුළු කිරීමේ අනුපිළිවෙල තබා ගනී. පයිතන් 3.7 සිට මෙය භාෂා අංගයක් බවට පත්වනු ඇත.

පයිතන් 3.6 හි වෙනස් කිරීමේ දී ( https://docs.python.org/3.6/whatsnew/3.6.html#whatsnew36-compactdict ):

මෙම නව ක්‍රියාවට නැංවීමේ අංගය ක්‍රියාත්මක කිරීමේ විස්තරයක් ලෙස සලකනු ලබන අතර එය විශ්වාසය තැබිය යුතු නොවේ (මෙය අනාගතයේ දී වෙනස් විය හැකිය, නමුත් භාෂා පිරිවිතර වෙනස් කිරීමට පෙර නිකුත් කිරීම් කිහිපයක් සඳහා භාෂාවේ මෙම නව නියෝග ක්‍රියාත්මක කිරීම අපේක්ෂා කෙරේ. සියලුම වර්තමාන සහ අනාගත පයිතන් ක්‍රියාත්මක කිරීම් සඳහා ඇණවුම්-සංරක්ෂණ අර්ථ නිරූපණය කිරීම; මෙය අහඹු පුනරාවර්තන අනුපිළිවෙල තවමත් ක්‍රියාත්මක වන භාෂාවේ පැරණි අනුවාදයන් සමඟ පසුපසට-ගැළපුම ආරක්ෂා කර ගැනීමට උපකාරී වේ, උදා: පයිතන් 3.5).

පයිතන් 3.7 හි ලේඛනයේ ( https://docs.python.org/3.7/tutorial/datastructures.html#dictionary ):

ශබ්දකෝෂයක ලැයිස්තුව ()) සිදු කිරීම, ශබ්දකෝෂයේ භාවිතා කර ඇති සියලුම යතුරු ලැයිස්තුවක් ඇතුළත් කිරීමේ අනුපිළිවෙලට ලබා දෙයි (ඔබට එය වර්ග කිරීමට අවශ්‍ය නම්, ඒ වෙනුවට වර්ග කළ ()) භාවිතා කරන්න).

එබැවින් පෙර සංස්කරණ මෙන් නොව, ඔබට පයිතන් 3.6 / 3.7 ට පසුව නියෝගයක් වර්ග කළ හැකිය. ඇතුළත උප ආ ict ාව ඇතුළුව කැදැලි නියෝගයක් වර්ග කිරීමට ඔබට අවශ්‍ය නම්, ඔබට කළ හැක්කේ:

test_dict = {'a': 1, 'c': 3, 'b': {'b2': 2, 'b1': 1}}

def dict_reorder(item):
    return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}

reordered_dict = dict_reorder(test_dict)

https://gist.github.com/ligyxy/f60f0374defc383aa098d44cfbd318eb


11

යතුරු භාවිතයෙන් පයිතන් ආ ict ාව වර්ග කිරීම සඳහා සරලම විසඳුමක් මෙහිදී මට හමු විය pprint. උදා.

>>> x = {'a': 10, 'cd': 20, 'b': 30, 'az': 99} 
>>> print x
{'a': 10, 'b': 30, 'az': 99, 'cd': 20}

නමුත් මුද්‍රණය භාවිතා කරන විට එය වර්ග කළ නියෝගයක් ලබා දෙනු ඇත

>>> import pprint 
>>> pprint.pprint(x)
{'a': 10, 'az': 99, 'b': 30, 'cd': 20}

11

ශබ්ද කෝෂයක් වර්ග කිරීමට පහසු ක්‍රමයක් තිබේ.

ඔබේ ප්‍රශ්නයට අනුව,

විසඳුම:

c={2:3, 1:89, 4:5, 3:0}
y=sorted(c.items())
print y

(මෙහි c, ඔබේ ශබ්ද කෝෂයේ නම වේ.)

මෙම වැඩසටහන පහත ප්‍රතිදානය ලබා දෙයි:

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

ඔයාට ඕන උනා වගේ.

තවත් උදාහරණයක්:

d={"John":36,"Lucy":24,"Albert":32,"Peter":18,"Bill":41}
x=sorted(d.keys())
print x

ප්‍රතිදානය ලබා දෙයි:['Albert', 'Bill', 'John', 'Lucy', 'Peter']

y=sorted(d.values())
print y

ප්‍රතිදානය ලබා දෙයි:[18, 24, 32, 36, 41]

z=sorted(d.items())
print z

ප්‍රතිදානය ලබා දෙයි:

[('Albert', 32), ('Bill', 41), ('John', 36), ('Lucy', 24), ('Peter', 18)]

එබැවින් එය යතුරු, අගයන් සහ අයිතම බවට වෙනස් කිරීමෙන් ඔබට අවශ්‍ය දේ මෙන් මුද්‍රණය කළ හැකිය. මෙය උපකාරී වේ යැයි සිතමු!


8

ඔබට අවශ්‍ය දේ හරියටම ජනනය කරනු ඇත:

 D1 = {2:3, 1:89, 4:5, 3:0}

 sort_dic = {}

 for i in sorted(D1):
     sort_dic.update({i:D1[i]})
 print sort_dic


{1: 89, 2: 3, 3: 0, 4: 5}

නමුත් මෙය කිරීමට නිවැරදි ක්‍රමය මෙය නොවේ, මන්ද, එය මෑතකදී මම ඉගෙන ගත් විවිධ ශබ්ද කෝෂ සමඟ වෙනස් හැසිරීමක් පෙන්විය හැකි බැවිනි. එබැවින් මා මෙහි බෙදාගන්නා මගේ විමසුමට ප්‍රතිචාර වශයෙන් ටිම් විසින් පරිපූර්ණ ක්‍රමයක් යෝජනා කර ඇත.

from collections import OrderedDict
sorted_dict = OrderedDict(sorted(D1.items(), key=lambda t: t[0]))

“විවිධ ශබ්ද කෝෂ සමඟ පැහැදිලි හැසිරීමක් පෙන්වීම” යන්නෙන් අදහස් කරන්නේ කුමක්ද? වර්ග කළ නොහැකි “වෙනස් හැසිරීම” කුමක්ද?
ingyhere

7

ඔබගේ ප්‍රශ්නයට අනුව වත්මන් ශබ්ද කෝෂය යතුරෙන් වර්ග කිරීමෙන් ඔබට නව ශබ්ද කෝෂයක් නිර්මාණය කළ හැකිය.

මෙය ඔබේ ශබ්දකෝෂයයි

d = {2:3, 1:89, 4:5, 3:0}

ලැම්බඩා ශ්‍රිතය භාවිතයෙන් මෙම d වර්ග කිරීමෙන් නව ශබ්ද කෝෂයක් සාදන්න

d1 = dict(sorted(d.items(), key = lambda x:x[0]))

d1 {1: 89, 2: 3, 3: 0, 4: 5 be විය යුතුය, d හි යතුරු මත පදනම්ව වර්ග කළ යුතුය.


6

මම හිතන්නේ පහසුම දෙය නම් විධානය යතුරෙන් වර්ග කර වර්ග කළ යතුර සුරැකීමයි: අගය යුගලය නව නියෝගයකින්.

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be neccessary
        dict2[key] = dict1[key]

එය වඩාත් පැහැදිලි කිරීම සඳහා:

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted     values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be  neccessary
        value = dict1[key]
        dict2[key] = value

5

පයිතන් නියෝග ඇණවුම් කර නැත. සාමාන්‍යයෙන්, මෙය ගැටළුවක් නොවන්නේ වඩාත් පොදු භාවිත අවස්ථාව වන්නේ සොයා බැලීමයි.

ඔබට අවශ්‍ය දේ කිරීමට ඇති සරලම ක්‍රමය වනුයේ collections.OrderedDictමූලද්‍රව්‍ය වර්ග කළ අනුපිළිවෙලට ඇතුළත් කිරීමයි.

ordered_dict = collections.OrderedDict([(k, d[k]) for k in sorted(d.keys())])

ඉහත සඳහන් කළ අය යෝජනා කර ඇති පරිදි ඔබට නැවත කියවීමට අවශ්‍ය නම්, සරලම ක්‍රමය වනුයේ වර්ග කළ යතුරු හරහා නැවත යෙදීමයි. උදාහරණ-

යතුරු මගින් වර්ග කළ මුද්‍රණ අගයන්:

# create the dict
d = {k1:v1, k2:v2,...}
# iterate by keys in sorted order
for k in sorted(d.keys()):
    value = d[k]
    # do something with k, value like print
    print k, value

යතුරු අනුව වර්ග කළ අගයන් ලැයිස්තුවක් ලබා ගන්න:

values = [d[k] for k in sorted(d.keys())]

2
for k,value in sorted(d.items()):වඩා හොඳය: යතුරෙන් යළිත් ලූපයට ප්‍රවේශ වීම වළක්වයි
ජීන්-ප්‍රංශුවා ෆැබ්රේ

5

මෙම ශ්‍රිතය ඕනෑම ශබ්ද කෝෂයක් එහි යතුරෙන් පුනරාවර්තනය කරයි. එනම්, ශබ්ද කෝෂයේ කිසියම් අගයක් ශබ්ද කෝෂයක් නම්, එය ද එහි යතුර අනුව වර්ග කරනු ලැබේ. ඔබ CPython 3.6 හෝ ඊට වැඩි ගණනක් ධාවනය කරන්නේ නම්, කළ හැකි දේ dictවෙනුවට සරල වෙනසක් කිරීමට වඩා OrderedDict.

from collections import OrderedDict

def sort_dict(d):
    items = [[k, v] for k, v in sorted(d.items(), key=lambda x: x[0])]
    for item in items:
        if isinstance(item[1], dict):
            item[1] = sort_dict(item[1])
    return OrderedDict(items)
    #return dict(items)

5

මෙය කිරීමට පහසු ක්‍රමයක්:

d = {2:3, 1:89, 4:5, 3:0}

s = {k : d[k] for k in sorted(d)}

s
Out[1]: {1: 89, 2: 3, 3: 0, 4: 5} 

4

මම තනි රේඛා ඩික් වර්ග කිරීම සමඟ ඉදිරියට එනවා.

>> a = {2:3, 1:89, 4:5, 3:0}
>> c = {i:a[i] for i in sorted(a.keys())}
>> print(c)
{1: 89, 2: 3, 3: 0, 4: 5}
[Finished in 0.4s]

මෙය ප්‍රයෝජනවත් වේ යැයි සිතමි.


2

යාලුවනේ ඔයා දේවල් සංකීර්ණ කරනවා ... ඒක ඇත්තටම සරලයි

from pprint import pprint
Dict={'B':1,'A':2,'C':3}
pprint(Dict)

ප්‍රතිදානය:

{'A':2,'B':1,'C':3}

ඉහළට ඔසවා ඇත්තේ ඒවා ප්‍රදර්ශනය කිරීම සඳහා මුද්‍රණ වර්ග ශබ්ද කෝෂ මා නොදැන සිටි නමුත් OP ඇත්ත වශයෙන්ම විමසා ඇත්තේ වර්ගීකරණය නොකළ සිට වර්ග කිරීම දක්වා “යාම” ගැන ය, එනම් OP මතකයේ පිළිවෙලට පවතින යමක් අවශ්‍ය බව පෙනේ, සමහර විට වර්ග කළ යතුරු අවශ්‍ය සමහර ඇල්ගොරිතම සඳහා
කැප්ටන් ලෙප්ටන්

මෙම ක්‍රමය මඟින් දම්වැල් පැවරීමට ඉඩ නොදෙනු ඇත. >>> adict = {'B': 1, 'A': 2, 'C': 3} >>> ppdict = pprint (adict) {'A': 2, 'B': 1, 'C': 3} >>> ppdict.type () Traceback (වඩාත් ම මෑත ඇමතුමක් අන්තිම) ගොනුව: "<stdin>", රේඛීය 1, <මොඩියුලය> AttributeError දී 'NoneType' වස්තුව කිසිදු විශේෂණය 'වර්ගය' ඇත

2

සරලම විසඳුම නම්, ඔබ විසින් ඩික්ට් යතුර ලැයිස්තුවක් ලබා ගත යුතු අතර එය පිළිවෙලට පිළිවෙලට තබා ඇති අතර පසුව ඩික්ට් හරහා නැවත කියන්න. උදාහරණයක් වශයෙන්

a1 = {'a':1, 'b':13, 'd':4, 'c':2, 'e':30}
a1_sorted_keys = sorted(a1, key=a1.get, reverse=True)
for r in a1_sorted_keys:
    print r, a1[r]

පහත දැක්වෙන්නේ ප්‍රතිදානයයි (අවරෝහණ අනුපිළිවෙල)

e 30
b 13
d 4
c 2
a 1

1

2.7 හි ක්‍රම දෙක සංසන්දනය කිරීමෙන් ඒවා සැබවින්ම සමාන බව පෙන්නුම් කරයි:

>>> setup_string = "a = sorted(dict({2:3, 1:89, 4:5, 3:0}).items())"
>>> timeit.timeit(stmt="[(k, val) for k, val in a]", setup=setup_string, number=10000)
0.003599141953657181

>>> setup_string = "from collections import OrderedDict\n"
>>> setup_string += "a = OrderedDict({1:89, 2:3, 3:0, 4:5})\n"
>>> setup_string += "b = a.items()"
>>> timeit.timeit(stmt="[(k, val) for k, val in b]", setup=setup_string, number=10000)
0.003581275490432745 

1
from operator import itemgetter
# if you would like to play with multiple dictionaries then here you go:
# Three dictionaries that are composed of first name and last name.
user = [
    {'fname': 'Mo', 'lname': 'Mahjoub'},
    {'fname': 'Abdo', 'lname': 'Al-hebashi'},
    {'fname': 'Ali', 'lname': 'Muhammad'}
]
#  This loop will sort by the first and the last names.
# notice that in a dictionary order doesn't matter. So it could put the first name first or the last name first. 
for k in sorted (user, key=itemgetter ('fname', 'lname')):
    print (k)

# This one will sort by the first name only.
for x in sorted (user, key=itemgetter ('fname')):
    print (x)

1
dictionary = {1:[2],2:[],5:[4,5],4:[5],3:[1]}

temp=sorted(dictionary)
sorted_dict = dict([(k,dictionary[k]) for i,k in enumerate(temp)])

sorted_dict:
         {1: [2], 2: [], 3: [1], 4: [5], 5: [4, 5]}


0

මගේ යෝජනාව මෙයයි, එමඟින් ඔබ අයිතම එකතු කරන විට ආ ict ාවක් වර්ග කිරීමට හෝ නියෝගයක් පිළිවෙලට තබා ගැනීමට ඉඩ සලසන අතර අනාගතයේදී අයිතම එකතු කිරීමට අවශ්‍ය වනු ඇත:

dictඔබ යන විට මුල සිටම ගොඩනඟන්න . ඔබගේ යතුරු ලැයිස්තුව සමඟ දෙවන දත්ත ව්‍යුහයක්, ලැයිස්තුවක් තබා ගන්න. ද්වීපාර්ශ්වික පැකේජයට ඇතුළත් කිරීමේ ශ්‍රිතයක් ඇති අතර එය වර්ග කළ ලැයිස්තුවකට ඇතුළු කිරීමට ඉඩ සලසයි, නැතහොත් ඔබේ ආ ict ාව මුළුමනින්ම ජනගහනය කිරීමෙන් පසුව ඔබේ ලැයිස්තුව වර්ග කරන්න. දැන්, ඔබ ඔබේ ආ ict ාව ගැන නැවත කියවන විට, ඒ වෙනුවට ඔබ එක් එක් යතුර පිළිවෙලට සකස් කර ගැනීම සඳහා ලැයිස්තුවට නැවත යොමු කරයි.


0

ප්‍රශ්නය සකස් කරන ආකාරය සඳහා, මෙහි ඇති බොහෝ පිළිතුරු එයට නිවැරදිව පිළිතුරු සපයයි.

කෙසේ වෙතත්, කරුණු ආකාරය සලකා යුතු ඇත්තටම acount දශක හා පරිගණක විද්යාව දශක වෙත ගෙන, සිදු කළ, එය මගේ මුළු suprise එන පමණක් ඇත්තටම පවතින බව එක් පිළිතුරක් මෙතන (සිට GrantJ හරිම associative බඳුන් (sortedcontainers) භාවිතය යෝජනා පරිශීලකයා) වන ඒවායේ ඇතුළත් කිරීමේ ස්ථානයේ යතුර මත පදනම්ව මූලද්‍රව්‍ය වර්ග කරයි.

එමඟින් සෑම ඇමතුමකටම දැවැන්ත කාර්යසාධන බලපෑමක් වළක්වනු ඇත sort(...)(අවම වශයෙන් O(N*log(N)), Nමූලද්‍රව්‍ය ගණනක් ඇති තැන (තර්කානුකූලව, මෙය භාවිතා කිරීමට යෝජනා කරන එවැනි සියලු විසඳුම් සඳහා මෙය අදාළ වේ sort(...)). එවැනි සියලු විසඳුම් සඳහා, sort(...)අවශ්‍ය වනු ඇති බව සැලකිල්ලට ගන්න. colletion අවශ්යතා හරිම ලෙස භාවිතා කිරීමට විට සෑම අවස්ථාවකදීම කැඳවනු පසු එය එකතු / අංග ඉවත් කිරීමෙන් වෙනස් කරන ලද්දේ ...


-1
l = dict.keys()
l2 = l
l2.append(0)
l3 = []
for repeater in range(0, len(l)):
    smallnum = float("inf")
    for listitem in l2:
        if listitem < smallnum:
            smallnum = listitem
    l2.remove(smallnum)
    l3.append(smallnum)
l3.remove(0)
l = l3

for listitem in l:
    print(listitem)

3
තවත් පිළිතුරු 14 ක් ඇත. ඔබේ කේතය ටිකක් පැහැදිලි කළ හැකි අතර එය අනෙක් විසඳුම් වලට වඩා හොඳ විය හැක්කේ ඇයි?
FelixSFD

Downvoted - කෙටි අර්ථ විරහිත විචල්ය නම් සහිත ලස්සන කියවිය නොහැකි කේතය l, l2, l3. පයිතන් සම්මත කාර්යයන් පිළිබඳ දැනුමක් නොමැති වක්‍ර හා අකාර්යක්ෂම ඇල්ගොරිතමයක උත්සාහයක් ලෙස පෙනේ, මුල් පෝස්ට් එකේ කුඩා උදාහරණයකින් පරීක්ෂා කළ විට එය ක්‍රියාත්මක නොවේ.
කැප්ටන් ලෙප්ටන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.