2017-01-22 13 views
5

मैं एक dict जो कुछ इस तरह चला जाता है है:मूल्यों जो कुंजी की अधिकतम संख्या है की पहचान करना

ip = { "1" : ['a','b'], 
     "2" : ['a','c'], 
     "3" : ['a','b','c','d'], 
     "4" : ['a','b','d','e']} 

मैं जो मूल्य सेट में आइटम की उनके खिलाफ कुंजियों की अधिकतम संख्या है खोजने की जरूरत है और अवरोही क्रम में सूचीबद्ध वस्तुओं भी है।

op = {"a":4,"b":3,"c":2,"d":2,"e":1} 

लेकिन मैंने कहीं पढ़ा है कि dict एक क्रमबद्ध तरीके से नहीं किया जा सकता है, तो उत्पादन भी एक टपल हो सकता है: उत्पादन कुछ तरह होगा

op = [('a', 4), ('b', 3), ('c', 2), ('d', 2), ('e', 1)] 

हम dict के माध्यम से पुनरावृति कर सकते हैं और मूल्य सेट में से प्रत्येक आइटम के लिए परिणाम उस आइटम के लिए defaultdict में परिणाम देता है।

op = defaultdict(int) 
for k,v in ip.iteritems(): 
    for item in v: 
     op[item]+=1 
op = sorted(op.items(), key=lambda x: x[1], reverse=True) 

क्या नेस्टेड से ऐसा करने का एक तेज़/बेहतर तरीका है?

+0

आप उदाहरण के लिए अपने अपेक्षित आउटपुट दे सकते हैं? –

+0

वांछित आउटपुट जोड़ा गया .. – nektar

+0

ऑर्डर किए गए शब्दकोश के रूप में ऐसी चीज है ... संग्रह संग्रह से ऑर्डर डिक्टर्ड '। –

उत्तर

3

, बस का उपयोग Counter और chain.from_iterable

In [9]: from collections import Counter 

In [10]: from itertools import chain 

In [11]: ip = { "1" : ['a','b'], 
    ...:  "2" : ['a','c'], 
    ...:  "3" : ['a','b','c','d'], 
    ...:  "4" : ['a','b','d','e']} 

In [12]: Counter(chain.from_iterable(ip.values())) 
Out[12]: Counter({'a': 4, 'b': 3, 'c': 2, 'd': 2, 'e': 1}) 

डुप्लिकेट मान निकालने के लिए आप हमेशा कुछ इस तरह कर सकते हैं:

>>> from operator import itemgetter 
>>> sorted(Counter(chain.from_iterable(map(set, ip.values()))).items(), key=itemgetter(1), reverse=True) 
[('a', 4), ('b', 3), ('c', 2), ('d', 2), ('e', 1)] 
0

यह यहाँ सही नहीं है:

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

बजाय का प्रयास करें:

sorted(ip, key=lambda elementInDict: len(ip[elementInDict]), reverse=True) 

उदाहरण:

for elementInDict in sorted(ip, key=lambda elementInDict: len(ip[elementInDict]), reverse=True): 
    print elementInDict, 
संबंधित मुद्दे