मेरे पास d1
और एक सूची l1
है।पायथन शब्दकोश समझ बहुत धीमी
शब्दकोश कुंजी तार हैं, और मान वे ऑब्जेक्ट्स हैं जिन्हें मैंने स्वयं परिभाषित किया है। यदि यह मदद करता है, तो मैं ऑब्जेक्ट का अधिक विस्तार से वर्णन कर सकता हूं लेकिन अभी के लिए, ऑब्जेक्ट्स में एक सूची विशेषता names
है, और name
के कुछ तत्व l1
में प्रकट हो सकते हैं या नहीं भी हो सकते हैं।
मुझे क्या करना चाहता था शब्दकोश d1
, जिसमें कहा तत्व में वस्तु का name
विशेषता तत्वों कि l1
में दिखाई देने वाले किसी में नहीं है के किसी भी तत्व फेंक था।
एक छोटी सी उदाहरण के रूप में:
l1 = ['cat', 'dog', 'mouse', 'horse', 'elephant',
'zebra', 'lion', 'snake', 'fly']
d1 = {'1':['dog', 'mouse', 'horse','orange', 'lemon'],
'2':['apple', 'pear','cat', 'mouse', 'horse'],
'3':['kiwi', 'lime','cat', 'dog', 'mouse'],
'4':['carrot','potato','cat', 'dog', 'horse'],
'5':['chair', 'table', 'knife']}
तो जिसके परिणामस्वरूप शब्दकोश किया जाएगा और अधिक या कम एक ही है, लेकिन प्रत्येक सूची के तत्वों फल और सब्जियों को छोड़कर 4
करने के लिए 1
से कुंजी-मान जोड़ों हो जाएगा, और इसमें 5 वां कुंजी-मान बराबर नहीं होगा क्योंकि फर्नीचर मानों में से कोई भी l1
में दिखाई नहीं देता है।
ऐसा करने के लिए मैं एक नेस्टेड सूची/समझ शब्दकोश जो इस तरह देखा इस्तेमाल किया:
d2 = {k: [a for a in l1 if a in d1[k]] for k in d1.keys()}
print(d2)
>>>>{'1': ['dog', 'mouse', 'horse'],
'3': ['cat', 'dog', 'mouse'],
'2': ['cat', 'mouse', 'horse'],
'5': [],
'4': ['cat', 'dog', 'horse']}
d2 = {k: v for k,v in d2.iteritems() if len(v)>0}
print(d2)
>>>>{'1': ['dog', 'mouse', 'horse'],
'3': ['cat', 'dog', 'mouse'],
'2': ['cat', 'mouse', 'horse'],
'4': ['cat', 'dog', 'horse'],}
यह काम करने के लिए लगता है, लेकिन बड़ी शब्दकोशों, 7000 मदों के लिए, इसके माध्यम से काम करने के लिए लगभग 20 सेकंड लेता है। अपने आप में और भयानक नहीं, लेकिन मुझे इसे एक लूप के अंदर करने की ज़रूरत है जो 10,000 गुना फिर से शुरू हो जाएगी, इसलिए वर्तमान में यह संभव नहीं है। इसे जल्दी से कैसे करें इस पर कोई सुझाव?
हर किसी के लिए नोट: वह 'itertitems' के उपयोग के कारण अजगर 2.7 नहीं 3 उपयोग कर रहा है, न दें' प्रिंट() 'मूर्ख आप – jamylak
पायथन 2.7 में समझदारी है? – Claudiu
@ क्लाउडियो हां उन्हें पूरी तरह से प्रतिलिपि बनाने योग्य उदाहरण – jamylak