मैं एक शब्दकोश के अंदर शब्दकोशों की कुंजी खोजने की कोशिश कर रहा हूं और उन्हें सेट/सूची समझ का उपयोग करके एक सेट में लिखने की कोशिश कर रहा हूं।

तो यह इस तरह दिखता है:

dict_o_dicts = {
    1: {'de': 'eins', 'en': 'one' },
    2: {'de': 'zwei', 'en': 'two' },
    3: {'ru': 'три', 'gr': 'τρία' },
    0: {'ru': 'ноль' }}

मैं इसका उपयोग करके काम कर सकता हूं:

result = set()
for x in dict_o_dicts:
    for y in dict_o_dicts[x]:
        result.add(y)

आवश्यक आउटपुट देता है:

{'de', 'en', 'gr', 'ru'}

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

result = [set(dict_o_dicts[x].keys()) for x in dict_o_dicts]

यह मुझे सेट की एक सूची देता है, लेकिन मैं उन्हें कैसे एकजुट कर सकता हूं? मुझे नहीं पता कि इसे एक पंक्ति में कैसे हल किया जाए।

3
goinginsane23 15 जिंदा 2022, 19:18
यहां ChainMap है। set(ChainMap(*dict_o_dicts.values()))
 – 
Olvin Roght
15 जिंदा 2022, 19:25
क्या संपूर्ण अभिव्यक्ति को एक बोध होना है या केवल आवश्यकता है कि यह एक-लाइनर हो?
 – 
fluffyyboii
15 जिंदा 2022, 19:25
क्या केवल मानक पुस्तकालय का उपयोग करने का कोई तरीका है?
 – 
goinginsane23
15 जिंदा 2022, 19:26
इसे केवल एक-लाइनर होना चाहिए
 – 
goinginsane23
15 जिंदा 2022, 19:26
@goinginsane23, collections.ChainMap का एक हिस्सा है मानक पुस्तकालय।
 – 
Olvin Roght
15 जिंदा 2022, 19:27

4 जवाब

यहाँ एक छोटा सा प्रयास है (क्या यह कोड गोल्फ है? :p)

set().union(*dict_o_dicts.values())

आउटपुट: {'de', 'en', 'gr', 'ru'}

4
mozway 15 जिंदा 2022, 19:38

आप सेट (या अन्य) समझ में लूप के लिए डबल (या अधिक) का उपयोग कर सकते हैं:

>>> { k for sub_dict in dict_o_dicts.values() for k in sub_dict }
{'de', 'gr', 'ru', 'en'}
3
MrGeek 15 जिंदा 2022, 19:29
1
आप सेट() सिंटैक्स को {} से बदल सकते हैं ताकि आपके पास नेस्टेड सेट समझ हो। वर्तमान में यह जो उपयोग कर रहा है वह एक जेन एक्सप्रेशन और एक सेट () कंस्ट्रक्टर जैसा दिखता है, जो आदर्श नहीं है।
 – 
rv.kvetch
15 जिंदा 2022, 19:29
1
@ rv.kvetch बेशक, धन्यवाद।
 – 
MrGeek
15 जिंदा 2022, 19:30
धन्यवाद यही वह है जिसे मैं ढूंढ रहा था
 – 
goinginsane23
15 जिंदा 2022, 19:30
result = set()
[[result.add(y) for y in dict_o_dicts[x]] for x in dict_o_dicts]

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

उत्पादन:

{'ru', 'gr', 'en', 'de'}
0
Bemwa Malak 15 जिंदा 2022, 19:28

इसे एकल स्तर की समझ के साथ करने के लिए, आप सेट की यूनियन विधि के साथ अनपैकिंग का उपयोग कर सकते हैं:

set().union(*(v for v in dict_o_dicts.values()))

{'gr', 'ru', 'de', 'en'}

ध्यान दें कि इस मामले में वास्तव में समझ की आवश्यकता नहीं है

set().union(*dict_o_dicts.values())

{'gr', 'ru', 'de', 'en'}
0
Alain T. 15 जिंदा 2022, 21:06