अजगर ताना करने के लिए


149

टपल के लिए, t = ((1, 'a'),(2, 'b')) dict(t)रिटर्न{1: 'a', 2: 'b'}

क्या प्राप्त करने का एक अच्छा तरीका है {'a': 1, 'b': 2}(चाबियाँ और वैल्स स्वैप किए गए)?

अंत में, मैं 1दिए गए 'a'या 2दिए गए रिटर्न को वापस पाने में सक्षम होना चाहता हूं 'b', शायद एक तानाशाही में परिवर्तित करना सबसे अच्छा तरीका नहीं है।

जवाबों:


277

प्रयत्न:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}

8
+1 सुंदर !, मुझे इसे ज़िप से आज़माना था dict(zip(*zip(*t)[::-1]))। यह धीमा, बदसूरत है और अधिक मेमोरी का उपयोग कर रहा है..जबकि 3x।
kevpie

@kevpie पायथन के बारे में अद्भुत बात यह है कि कुछ करने के तरीके को व्यक्त करने के सौ तरीके हैं, प्रत्येक अगले के रूप में दिलचस्प है।
bjd2385

महान, अगर आपके पास एक ट्रिपल है जो आप कर सकते हैं: dict((x, y) for x, y, z in t)या dict((x, (y, z)) for x, y, z in t)दूसरे और तीसरे मूल्यों को एक टपल के रूप में प्राप्त करने के लिए।
Mar181818 Mar181818 Mar18 '' '' '

बहुत तेज, व्यापक और सरल। एकदम सही जवाब।
gies0r

73

थोड़ा सरल तरीका:

>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}

1
क्या यह तेज करता है?
माज़ा

9
नक्शा और तानाशाही कार्य सी में लागू होते हैं और किसी भी अजगर संस्करण की तुलना में बहुत तेज होते हैं
२१'१३

1
मैं इस तरह के लिए reverseबाहर वर्तनी की तरह है।
फ्रेरिच राबे

4
@ मज़ाज़ा: सामान्य तौर पर, प्रदर्शन परीक्षण यह सुझाव देते हैं कि (सी कार्यान्वयन में कम से कम) mapएक समझ से अधिक तेज़ है जब चीज़ को मैप किया जा रहा है एक और अंतर्निहित फ़ंक्शन (जैसे reversed); अधिकांश अन्य मामलों में, विपरीत सच है। लेकिन यह अनुमान से बेहतर है :)
कार्ल केनचेल

43

और भी संक्षिप्त यदि आप अजगर 2.7 पर हैं:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}

9
>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}

या:

>>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ]
[{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}]

मैं यह नहीं देखता कि यह ओपी के सवाल का जवाब कैसे देता है
Luca Amerio

4

यदि एक ही कुंजी के लिए कई मान हैं, तो निम्न कोड उन मानों को उनकी कुंजी के अनुरूप सूची में जोड़ देगा,

d = dict()
for x,y in t:
    if(d.has_key(y)):
        d[y].append(x)
    else:
        d[y] = [x]

2

यहाँ यह करने के कुछ तरीके हैं:

>>> t = ((1, 'a'), (2, 'b'))

>>> # using reversed function
>>> dict(reversed(i) for i in t)
{'a': 1, 'b': 2}

>>> # using slice operator
>>> dict(i[::-1] for i in t)
{'a': 1, 'b': 2}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.