2009-08-05 21 views
6

मेरे पास तीन सूचियां हैं, पहला नामों की एक सूची है, दूसरा शब्दकोशों की एक सूची है, और तीसरा डेटा की एक सूची है। सूची में प्रत्येक स्थिति अन्य सूचियों में समान पदों से मेल खाती है। सूची_1 [0] में सूची_2 [0] और सूची_3 [0], आदि में संबंधित डेटा है। मैं इन तीन सूचियों को एक शब्दकोश के अंदर एक शब्दकोश में बदलना चाहता हूं, जिसमें सूची_1 में प्राथमिक कुंजी होने के मान हैं। सब कुछ क्रम में रखते हुए मैं यह कैसे करूँ?शब्दकोशों को जोड़ना

उत्तर

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

zip बारे में अधिक जानकारी के लिए documentation देखें।

शेरबेस्ट नीचे बताए गए अनुसार, यदि आपका इनपुट डेटा बड़ा है तो आप itertools.izip() पर देखना चाहेंगे। izip अनिवार्य रूप से zip जैसा ही है, लेकिन यह सूचियों के बजाय इटरेटर बनाता है। इस तरह, आप शब्दकोश बनाने से पहले बड़ी अस्थायी सूचियां नहीं बनाते हैं।

+5

यदि ए, बी, सी बहुत बड़ा होगा, तो मैं itertools मॉड्यूल से izip की अनुशंसा करता हूं। – Arpegius

+0

@lionbest: अच्छा बिंदु, मैंने इसे जोड़ा है। – balpha

1

अजगर 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

अजगर 2.5:

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

अगर इन बातों का क्रम महत्वपूर्ण है, तो आप एक शब्दकोश का उपयोग नहीं करना चाहिए। परिभाषा के अनुसार, वे unordered हैं। आप many ordered_dictionary implementations में से एक का उपयोग कर फ़्लोटिंग के आसपास उपयोग कर सकते हैं, या अजगर 2.7 या 3.1 के लिए प्रतीक्षा कर सकते हैं जिसमें संग्रह मॉड्यूल में एक आदेशित शब्दकोश कार्यान्वयन शामिल होगा।

संबंधित मुद्दे