2011-11-27 11 views
5

पर प्राप्त करें मेरे पास एक क्रमबद्ध शब्दकोश (OrderedDict) मान द्वारा क्रमबद्ध है। मैं शीर्ष (25 कहें) प्रमुख मान कैसे प्राप्त कर सकता हूं और उन्हें एक नए शब्दकोश में जोड़ सकता हूं? उदाहरण के लिए: मैं कुछ इस तरह है:किसी ऑर्डर्ड डिक्शनरी से पहले एन कुंजी जोड़े को दूसरे

frequent={'c':30,'b':20} 
:

dictionary={'a':10,'b':20,'c':30,'d':5} 
ordered=OrderedDict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)) 

अब ordered एक आदेश दिया शब्दकोश, मैं एक शब्दकोश का निर्माण करना चाहते है, शीर्ष 2 सबसे अक्सर वस्तुओं और अपनी चाबी लेने के द्वारा कहते हैं

उत्तर

12

ऑर्डरर्ड डिक्ट का प्राथमिक उद्देश्य ऑर्डर बनाए रखा गया है जिसमें तत्व बनाए गए थे। तुम यहाँ क्या चाहते collections.Counter है, जो निर्मित एन-सबसे-अक्सर कार्यक्षमता है: कि काम करता है

>>> dictionary={'a':10,'b':20,'c':30,'d':5} 
>>> import collections 
>>> collections.Counter(dictionary).most_common(2) 
[('c', 30), ('b', 20)] 
+0

धन्यवाद, यह वही है जो मैं चाहता था। –

+0

धन्यवाद। यह बहुत उपयोगी था! –

2

क्या आपने शीर्ष nth सबसे अधिक लगातार आइटम और उनकी चाबियाँ प्राप्त करने के लिए क्रमबद्ध से tuples की सूची को अनुक्रमणित करने का प्रयास किया है? उदाहरण के लिए, यदि आप शीर्ष 2 सबसे लगातार आइटम की जरूरत है, तो आप

dictionary={'a':10,'b':20,'c':30,'d':5} 
ordered=dict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)[:2]) 
+0

धन्यवाद,। :) –

1

ordered.iteritems() विधि से वस्तुओं के इटरेटर मिलता है हो सकता है।

अब, पहले एन आइटम लेने के लिए, आप विधि itertools से उपयोग कर सकते हैं।

>>> import itertools 
>>> toptwo = itertools.islice(ordered.iteritems(), 2) 
>>> list(toptwo) 
[('c', 30), ('b', 20)] 
>>> 
4

बस (रिवर्स) का आदेश दिया शब्दकोश आपके पास पहले से में पहली एन आइटम (कुंजी युग्म) का उपयोग कर एक नया शब्दकोश बनाते हैं। उदाहरण के लिए, प्राप्त करने के लिए शीर्ष तीन आइटम आप कुछ इस तरह कर सकता है:

from collections import OrderedDict 
from operator import itemgetter 

# create dictionary you have 
dictionary = {'a': 10, 'b': 20, 'c': 30, 'd': 5} 
ordered = OrderedDict(sorted(dictionary.items(), key=itemgetter(1), reverse=True)) 

topthree = dict(ordered.items()[:3]) 
print(topthree) # -> {'a': 10, 'c': 30, 'b': 20} 

अजगर 3 एक के लिए dict(list(ordered.items())[:3])items() के बाद रिटर्न उस संस्करण में एक इटरेटर इस्तेमाल कर सकते हैं। वैकल्पिक रूप से आप dict(itertools.islice(ordered.items(), 3)) का उपयोग कर सकते हैं जो कि पायथन 2 और 3 दोनों में काम करेगा।

यह भी ध्यान दें कि परिणाम केवल एक नियमित शब्दकोश है-जैसा कि आपने अपने प्रश्न में निर्दिष्ट किया है- collections.Counter या अन्य प्रकार के मैपिंग नहीं।

संबंधित मुद्दे