मेरे पास का शब्दकोश है

animals = {'cat': 24, 'dog': 21, 'bird': 16, 'fish': 11}

और एक सूची जो ऑर्डर को छोड़कर animal.keys() से मेल खाती है:

messy_animals = ['bird', 'dog', 'fish', 'cat']

एक सूची बनाने का सबसे आसान तरीका क्या होगा जिसमें animals.values() उसी क्रम में हो जिस क्रम में messy_animals सूची है?

तो अपेक्षित आउटपुट होगा:

messy_animals_counts = [16, 21, 11, 24]

मुझे आशा है कि यह स्पष्ट है कि मैं क्या हासिल करना चाहता हूं। धन्यवाद और एक अच्छा सप्ताहांत हो।

1
Johannes Jamrosz 21 मार्च 2020, 20:02

3 जवाब

आप इसे सूची समझ के साथ कर सकते हैं:

messy_animal_counts = [animals[m] for m in messy_animals]

यदि आप नहीं जानते कि messy_animals में सब कुछ भी निर्देश में है, तो आप इसके बजाय get का उपयोग कर सकते हैं।

messy_animal_counts = [animals.get(m) for m in messy_animals]

यदि आप get विधि के लिए दूसरा पैरामीटर प्रदान करते हैं, तो आप एक डिफ़ॉल्ट (None के बजाय) निर्दिष्ट कर सकते हैं।

इस विधि में समय जटिलता O(N) है।

2
blueteeth 21 मार्च 2020, 20:40

मुझे एक समाधान मिला:

for x in messy_a:
    for k,v in animals.items():
        if x == k:
            messy_a_counts.append(v)

print(messy_a_counts)

आउटपुट:

[16, 21, 11, 24]
1
Dharman 21 मार्च 2020, 20:27
values = [animals[k] for k in messy_animals] में N जानवरों के लिए O(1) के N लुकअप शामिल हैं। आपका कोड कुछ भी नहीं करता है और अगर स्टेटमेंट प्लस लूपिंग द्वारा एक नई सूची तैयार करता है - आप आंतरिक लूप से तोड़कर अपना छोटा कर सकते हैं लेकिन यह अभी भी सूची COMP से बहुत खराब होगा। तो नहीं, हम सहमत नहीं हैं। माफ़ करना
 – 
Patrick Artner
21 मार्च 2020, 20:09
क्षमा करें, मैंने इसे गलत बताया। मैं जो पूछना चाहता था वह है: क्या यह सबसे अच्छा तरीका है? पहले से ही यह मानते हुए कि एक बेहतर हो सकता है। जवाब के लिए धन्यवाद।
 – 
Johannes Jamrosz
21 मार्च 2020, 21:02

आप बिल्ट-इन फ़ंक्शन map का उपयोग dict.get के साथ कर सकते हैं:

list(map(animals.get, messy_animals))

आउटपुट:

[16, 21, 11, 24]
1
kederrac 21 मार्च 2020, 20:36