2010-08-11 10 views
7

मैं एक टपल इस प्रकार परिभाषित किया है: (स्लॉट, गेमआईडी, बिटरेट)tuples की सूची से, जोड़ों का एक शब्दकोश बनाने के लिए सुरुचिपूर्ण तरीका?

और एक सूची बनाई है उनमें से myListOfTuples कहा जाता है। इस सूची में एक ही gameid युक्त टुपल्स हो सकते हैं।

उदा। सूची देख सकते हैं जैसे:

[ 
    (1, "Solitaire", 1000), 
    (2, "Diner Dash", 22322), 
    (3, "Solitaire", 0), 
    (4, "Super Mario Kart", 854564), 
    ... and so on. 
] 

इस सूची से, मैं जोड़े का एक शब्दकोश बनाने की जरूरत - (gameId, bitrate), जहां कि gameId के लिए bitrate पहले एक है कि मैं उस विशेष gameId के लिए भर में आया है myListOfTuples में।

उदा। उपरोक्त उदाहरण से - जोड़े के शब्दकोश में केवल एकgameId "सॉलिटेयर" के साथ जोड़ी होगी: ("Solitaire", 1000) क्योंकि 1000 पहला बिटरेट पाया गया है।

एनबी। मैं इस के साथ अद्वितीय खेल का एक सेट बना सकते हैं:

uniqueGames = set((e[1] for e in myListOfTuples)) 

उत्तर

10

python2.6

dict(x[1:] for x in reversed(myListOfTuples)) 

आप Python2.7 या 3.1 है, तो के लिए, आप katrielalex के जवाब

4
{ gameId: bitrate for _, gameId, bitrate in reversed(myListOfTuples) }.items() 

(यह एक देखने के लिए, नहीं एक सेट है यह setlike कार्य किया है, लेकिन आप एक सेट की आवश्यकता है, यह एक के लिए डाली।।)

क्या आप वाकई एक सेट चाहते हैं, gameId: bitrate का शब्दकोश नहीं? उत्तरार्द्ध मुझे इस समस्या के लिए एक और अधिक प्राकृतिक डेटा संरचना होने लगता है।

+0

धन्यवाद katrielalex उपयोग कर सकते हैं - मैं बस के बाद 'for' में सिंटेक्स त्रुटि मिलता है। 'उलट' क्यों? – BeeBand

+2

'उलट' है क्योंकि एक ही कुंजी को बार-बार शब्दकोश असाइनमेंट इसके मूल्य को ओवरराइट करता है; हम सूची में * पहला * मान चाहते हैं, इसलिए हम पीछे की तरफ पुन: प्रयास करते हैं। मुझे लगता है कि आप पाइथन 2.x का उपयोग कर रहे हैं, क्योंकि शब्दकोश की समझ Py3k के लिए नई है। आप जनरेटर के साथ एक ही काम कर सकते हैं, हालांकि यह थोड़ा गड़बड़ है। फिक्सिंग। – katrielalex

+0

मैं देखता हूं। हां, वास्तव में एक शब्दकोश अधिक उपयोगी होगा। – BeeBand

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