python - प्रमुख मूल्य युग्मों द्वारा सूचियों के क्रमबद्ध शब्दकोश




python-3.x list (2)

आप ऐसा कर सकते हैं

  1. अपने मानचित्रण को पलटना, संख्याओं के साथ एक शब्दकोश बनाना => नामों की सूची
  2. इस शब्दकोष को क्रमबद्ध करें (tuple के रूप में)
  3. 3 पहले आइटम चुनें

इस तरह:

import collections

d = collections.defaultdict(list)
data = {'fbi': [229, 421, 586, 654, 947, 955, 1095, 1294, 1467, 2423, 3063, 3478, 3617, 3730, 3848, 3959, 4018, 4136, 4297, 4435, 4635, 4679, 4738, 5116, 5211, 5330, 5698, 6107, 6792, 6906, 7036], 'comey': [605, 756, 1388, 1439, 1593, 1810, 1959, 2123, 2506, 3037, 6848], 'hillary': [14, 181, 449, 614, 704, 1079, 1250, 2484, 2534, 2659, 3233, 3374, 3488, 3565, 4076, 4756, 4865, 6125, 7109]}

for k,vlist in data.items():
    for v in vlist:
        d[v].append(k)

result = [v[0] for k,v in sorted(d.items())[:3]]

print(result)

यह प्रिंट:

['hillary', 'hillary', 'fbi']

ध्यान दें कि यदि किसी मूल्य से जुड़े कई नाम हैं, तो यह कोड केवल पहले एक को चुन लेगा ( v[0] )

मैं उन मानों को क्रमबद्ध करने की कोशिश कर रहा हूं जो सूचियों के शब्दकोश के अंदर हैं और उनमें से एक नई सूची बनाते हैं। यहाँ डेटा है:

{
    'fbi': [229, 421, 586, 654, 947, 955, 1095, 1294, 1467, 2423, 3063, 3478, 3617, 3730, 3848, 3959, 4018, 4136, 4297, 4435, 4635, 4679, 4738, 5116, 5211, 5330, 5698, 6107, 6792, 6906, 7036], 
    'comey': [605, 756, 1388, 1439, 1593, 1810, 1959, 2123, 2506, 3037, 6848], 
    'hillary': [14, 181, 449, 614, 704, 1079, 1250, 2484, 2534, 2659, 3233, 3374, 3488, 3565, 4076, 4756, 4865, 6125, 7109]
}

मैं जो कोशिश कर रहा हूं, वह यह है कि इनमें 20 सबसे छोटे मूल्यों को खोजा जाए और उनकी संबंधित कुंजियों की सूची प्राप्त की जाए। उदाहरण के लिए, पहले तीन सबसे कम मूल्य 14 (हिलेरी), 181 (हिलेरी) और 229 (एफबीआई) हैं। इसलिए, मैं इस तरह से एक सूची कैसे प्राप्त कर सकता हूं:

['hillary', 'hillary', 'fbi']

सभी मूल्य हमेशा अलग-अलग होंगे। इसके अलावा, सूची के सभी मूल्य क्रमबद्ध हैं, आरोही से अवरोही तक।

यहाँ मैं कोशिश की है:

for m in range(1,20):
    for i in sort_vals.values():
        if i[0] < a[0]:
            a[0] = i[0]

यह मुझे कम से कम मूल्य देता है लेकिन एक पुनरावृत्ति के बाद किसी अन्य के रूप में नहीं, कम से कम मूल्य हमेशा समान होता है। मुझे लगता है कि अगर मैं उस विशेष मूल्य को हटा सकता हूं तो यह मददगार होगा। कुछ और सोच भी नहीं सकते। धन्यवाद!


आप संबंधित key/value युग्मों के साथ ट्यूल की सूची में शब्दकोश ( d यहाँ) को समतल कर सकते हैं, और मानों के अनुसार टुपल्स को सॉर्ट कर सकते हैं:

from operator import itemgetter

l = [(k,i) for k,v in d.items() for i in v]
# [('fbi', 229), ('fbi', 421), ('fbi', 586), ('fbi', 654),...
list(zip(*sorted(l, key=itemgetter(1))[:3]))[0]
# ('hillary', 'hillary', 'fbi')






dictionary