मैं एक शब्दकोश को ट्यूपल्स की सूची में कैसे बदल सकता हूं?


219

अगर मेरे पास एक शब्दकोश है:

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

मैं इसे इसे कैसे बदल सकता हूं?

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

और मैं इसे इसे कैसे बदल सकता हूं?

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

7
[tuple(reversed(x)) for x in d.items()]
गेरज

1
@garej: आपके कोड में xपहले से ही यह दिया गया है tuple(यह itemsएक पुनरावृति का निर्माण करने की प्रकृति है tuple), यह सिर्फ करने के लिए सरल / तेज़ होगा [x[::-1] for x in d.items()]; पीछे टुकड़ा सीधे एक उलट निर्माण करती है tupleबल्कि की तुलना में उचित आकार के tupleएक iteratively रूप से भरें निर्माता (overallocation साथ और अंत में आकार बदलने) tupleएक से reversedइटरेटर।
शैडो रेंजर

@ शादो रेंजर, आप सही कह रहे हैं। मैं सिर्फ यह स्पष्ट करना चाहता था कि यह हमेशा k, vऐसे मामलों में पैटर्न की आवश्यकता नहीं है ।
गारेज

नोट: जोड़ा compatibilityक्योंकि py2.x // py3.x मतभेद की टैग
dreftymac

जवाबों:


360
>>> 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 के पास वैसे भी कोई विशिष्ट आदेश नहीं है। 1 इसे क्रमबद्ध करें या आवश्यकतानुसार व्यवस्थित करें।

देखें: आइटम () , पुनरावृत्तियाँ ()


Python 3.x में, आप उपयोग नहीं करेंगे iteritems(जो अब मौजूद नहीं है), बल्कि उपयोग करें items, जो अब शब्दकोश आइटम में "दृश्य" देता है। पायथन 3.0 के लिए व्हाट्स न्यू डॉक्युमेंट देखें , और व्यूज पर नया डॉक्यूमेंटेशन

1: अजगर के लिए सम्मिलन-क्रम संरक्षण पायथन 3.7 में जोड़ा गया था


8
आइटम () python3 में एक श्रुत_ दृश्य देता है। एक सूची "सूची ()" के लिए कलाकारों के साथ इस कॉल को लपेटें। @ SilentGhost का उत्तर देखें
Erich

55

चूंकि किसी और ने नहीं किया था, मैं 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')]

18

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

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

आपको [ ('a', 1), ('b', 2), ('c', 3) ]और मिलेगा

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

दूसरा उदाहरण।

यदि आपको पसंद है तो सूची की समझ के बारे में अधिक पढ़ें , यह बहुत दिलचस्प है कि आप उनके साथ क्या कर सकते हैं।


10

नामांकितों की एक सूची बनाएँ

यह अक्सर नामित नाम का उपयोग करने के लिए बहुत उपयोगी हो सकता है । उदाहरण के लिए, आपके पास कुंजी के रूप में 'नाम' का शब्दकोष है और मानों की तरह 'स्कोर':

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

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

>>> 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')

पहले सबसे कम स्कोर के साथ हल:

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

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

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

7

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

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')]
>>> 


5

ये पायथन 3.x और पायथन 2.x से ब्रेकिंग परिवर्तन हैं

Python3.x उपयोग के लिए

dictlist = []
for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)

पायथन 2.7 उपयोग के लिए

dictlist = []
for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

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

>>> [ए (एक्स [ए]] एक्स में ए के लिए () ()
[('ए', 1), ('सी', 3), ('बी', 2)]

>>> [(एक [x], x) के लिए x में a.keys ()]
[(1, 'ए'), (3, 'सी'), (2, 'बी')]

4

तक keys()और values()शब्दकोश के तरीकों और zip

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

डेमो:

>>> 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')]

यह मेरे लिए एक विकल्प के रूप में collections.OrderedDict()काम करता है जो पायथन एचटीटीपी अनुरोधों के कई संस्करणों के साथ बेहतर तरीके से काम करता है। भले ही मैं zipफ़ंक्शन नाम को कुछ अस्पष्ट / अतिभारित के रूप में नापसंद करता हूं ।
मार्कहु

ध्यान दें- zipअधिसूचना एक "गहरी" कास्टिंग नहीं है, यानी अगर वहाँ नेस्टेड बच्चे हैं, तो वे प्रभावित नहीं होंगे। आपको अपनी स्वयं की पुनरावृत्ति को रोल करना पड़ सकता है।
मार्कहु

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

print list

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

3

एक सरल एक होगा

list(dictionary.items())  # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys()))  # list of (key, value) tuples

दूसरा कोई भी सरल नहीं है, लेकिन हाँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.