2009-03-23 11 views
151

अगर मैं है की तरह एक शब्दकोश:मैं पाइथन शब्दकोश को टुपल्स की सूची में कैसे परिवर्तित कर सकता हूं?

{ 'a': 1, 'b': 2, 'c': 3 } 

मैं इसे कैसे यह करने के लिए परिवर्तित कर सकते हैं?

[ ('a', 1), ('b', 2), ('c', 3) ] 

और मैं इसे कैसे परिवर्तित कर सकता हूं?

[ (1, 'a'), (2, 'b'), (3, 'c') ] 
+0

'[टपल d.items में एक्स के लिए ((एक्स) उलट)()]' – garej

उत्तर

278
>>> d = { 'a': 1, 'b': 2, 'c': 3 } 
>>> d.items() 
[('a', 1), ('c', 3), ('b', 2)] 
>>> [(v, k) for k, v in d.iteritems()] 
[(1, 'a'), (3, 'c'), (2, 'b')] 

यह आप चाहते हैं क्रम में नहीं है, लेकिन dicts किसी भी विशिष्ट क्रम वैसे भी जरूरत नहीं है। इसे व्यवस्थित करें या इसे आवश्यकतानुसार व्यवस्थित करें।

देखें: items(), iteritems()


अजगर 3.x में, आप iteritems (जो अब मौजूद नहीं है) का उपयोग नहीं होगा, लेकिन इसके बजाय items, जो अब शब्दकोश आइटम में एक "दृश्य" रिटर्न का उपयोग । पाइथन 3.0 के लिए What's New दस्तावेज़ और नया documentation on views देखें।

+0

आइटम() की ओर से एक dict_keys python3 में देख सकते हैं। एक सूची "सूची()" में एक कलाकार के साथ इस कॉल को लपेटें। देखें @ SilentGhost का जवाब – Erich

2
[(k,v) for (k,v) in d.iteritems()] 

और

[(v,k) for (k,v) in d.iteritems()] 
+6

"((,, v) के लिए d.iteritems()] में" (,, v) के लिए देखें "d.items() –

5

क्या आप चाहते हैं dict के items() और iteritems() तरीकों है। items (कुंजी, मान) tuples की एक सूची देता है। चूंकि टुपल्स अपरिवर्तनीय हैं, इसलिए उन्हें उलट नहीं किया जा सकता है। इस प्रकार, आपको वस्तुओं को फिर से भरना होगा और उलटा (मूल्य, कुंजी) tuples प्राप्त करने के लिए नए tuples बनाना होगा। पुनरावृत्ति के लिए, iteritems बेहतर है क्योंकि यह पूरी सूची को स्मृति में रखने के बजाय (कुंजी, मान) tuples का उत्पादन करने के लिए जनरेटर का उपयोग करता है।

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = { 'a': 1, 'b': 2, 'c': 3 } 
>>> a.items() 
[('a', 1), ('c', 3), ('b', 2)] 
>>> [(v,k) for (k,v) in a.iteritems()] 
[(1, 'a'), (3, 'c'), (2, 'b')] 
>>> 
14

आप सूची समझ का उपयोग कर सकते हैं।

[(k,v) for k,v in a.iteritems()] 

आप [ ('a', 1), ('b', 2), ('c', 3) ] और

[(v,k) for k,v in a.iteritems()] 

अन्य उदाहरण मिल जाएगा।

Read more about list comprehensions यदि आप चाहें, तो यह बहुत दिलचस्प है कि आप उनके साथ क्या कर सकते हैं।

2
 
>>> a={ 'a': 1, 'b': 2, 'c': 3 } 

>>> [(x,a[x]) for x in a.keys() ] 
[('a', 1), ('c', 3), ('b', 2)] 

>>> [(a[x],x) for x in a.keys() ] 
[(1, 'a'), (3, 'c'), (2, 'b')] 
30

के बाद से कोई और था, मैं py3k संस्करणों जोड़ देंगे:

>>> d = { 'a': 1, 'b': 2, 'c': 3 } 
>>> list(d.items()) 
[('a', 1), ('c', 3), ('b', 2)] 
>>> [(v, k) for k, v in d.items()] 
[(1, 'a'), (3, 'c'), (2, 'b')] 
7

namedtuples

की एक सूची बनाएं यह अक्सर बहुत namedtuple उपयोग करने के लिए आसान हो सकता है।

d = {'John':5, 'Alex':10, 'Richard': 7} 

आप tuples के रूप में आइटम, हल कर यदि आप चाहें सूचीबद्ध कर सकते हैं, और नाम और की, चलो अंक प्राप्त: उदाहरण के लिए, आप कुंजी के रूप में 'नाम' का एक शब्दकोश और जैसे मूल्यों के रूप में 'स्कोर' है कहते हैं कि उच्चतम स्कोर के साथ खिलाड़ी (सूचकांक = 0) बहुत Pythonically इस तरह:

>>> player = best[0] 

>>> player.name 
     'Alex' 
>>> player.score 
     10 

यह करने के लिए कैसे: यादृच्छिक क्रम में

सूची या collections.OrderedDict के आदेश रखने:

import collections 
Player = collections.namedtuple('Player', 'name score') 
players = list(Player(*item) for item in d.items()) 

क्रम में , मान ('स्कोर') के अनुसार क्रमबद्ध:

import collections 
Player = collections.namedtuple('Player', 'score name') 

पहले न्यूनतम स्कोर के साथ हल कर:

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True) 
:

worst = sorted(Player(v,k) for (k,v) in d.items()) 

पहले उच्चतम स्कोर के साथ हल कर

3

keys() औरद्वाराशब्दकोश के तरीके और zip

zip आदेशित शब्दकोश की तरह कार्य करता है जो टुपल्स की एक सूची लौटाएगा।

डेमो:

>>> d = { 'a': 1, 'b': 2, 'c': 3 } 
>>> zip(d.keys(), d.values()) 
[('a', 1), ('c', 3), ('b', 2)] 
>>> zip(d.values(), d.keys()) 
[(1, 'a'), (3, 'c'), (2, 'b')] 
+0

के लिए एक भयानक समतुल्य है। यह मेरे लिए' संग्रह के विकल्प के रूप में काम करता है। ऑर्डर्ड डिक्ट () 'जो पाइथन HTTP अनुरोध lib के कई संस्करणों के साथ बेहतर काम करता है। भले ही मैं 'ज़िप' फ़ंक्शन नाम को कुछ हद तक अस्पष्ट/ओवरलोडेड के रूप में नापसंद करता हूं। – MarkHu

+0

ध्यान दें कि 'ज़िप' -इफिकेशन "गहरी" कास्टिंग नहीं है, यानी अगर घोंसले वाले बच्चे हैं, तो वे प्रभावित नहीं होंगे। आपको अपना खुद का रिकर्सन रोल करना पड़ सकता है। – MarkHu

2
d = {'John':5, 'Alex':10, 'Richard': 7} 
list = [] 
for i in d: 
    k = (i,d[i]) 
    list.append(k) 

print list 
+2

हालांकि यह कोड समस्या को हल करने में मदद कर सकता है, यह _why_ और/या _how_ को प्रश्न का उत्तर नहीं देता है। इस अतिरिक्त संदर्भ को प्रदान करने से इसके दीर्घकालिक शैक्षणिक मूल्य में काफी सुधार होगा। स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, जिसमें सीमाएं और मान्यताओं को लागू किया गया है। –

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

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