कुंजी-मूल्य टुपल्स की सूची को शब्दकोश में कैसे बदलें?


125

मेरे पास एक सूची है जो इस तरह दिखती है:

[('A', 1), ('B', 2), ('C', 3)]

मैं इसे एक शब्दकोश में बदलना चाहता हूं जो दिखता है:

{'A': 1, 'B': 2, 'C': 3}

इसके बारे में जाने का सबसे अच्छा तरीका क्या है?

संपादित करें: टुपल्स की मेरी सूची वास्तव में अधिक है:

[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]

1
किस तरह की संस्थाएँ A, B(या BERA) और C(या CE) वास्तव में हैं? धन्यवाद
खाएं

मैं शर्त लगाने के लिए तैयार हूं कि नीचे दिए गए काम के उदाहरणों के साथ उत्पन्न त्रुटियां उसके पास ट्यूपल्स की सूची नहीं है, लेकिन एक बहुत लंबी सूची है जो वह 2-ट्यूपल्स में अलग करना चाहती है।
gddc

जवाबों:


90

यह मुझे सूची को विभाजित करने और इसे ज़िप करने की कोशिश के रूप में एक ही त्रुटि देता है। ValueError: शब्दकोश अद्यतन अनुक्रम तत्व # 0 की लंबाई 1916 है; 2 की आवश्यकता है

यह आपका वास्तविक प्रश्न है।

इसका उत्तर यह है कि आपकी सूची के तत्व वे नहीं हैं जो आप सोचते हैं कि वे हैं। यदि आप लिखते हैं, myList[0]तो आप पाएंगे कि आपकी सूची का पहला तत्व टू-टपल नहीं है, उदाहरण के लिए ('A', 1), बल्कि 1916-लंबाई की पुनरावृत्ति।

एक बार जब आप वास्तव में आपके मूल प्रश्न ( myList = [('A',1),('B',2),...]) में बताए गए फॉर्म में एक सूची रखते हैं , तो आपको बस इतना करना होगा dict(myList)


धन्यवाद, मुझे नहीं पता कि सूची को इस तरह कैसे मिला, लेकिन इसे खरोंच से पुनः प्राप्त करने के बाद, मैं इसे ठीक करने में सक्षम था।
फ्रेड विल्सन

1
@DJ_Stuffy_K: (यह मानते हुए संदर्भ इस प्रश्न से असंबंधित है) सामान्य तौर पर, जब तक कि यह अतिश्योक्तिपूर्ण न हो या आपके कार्यक्रम को धीमा न कर दे, तब तक जो भी सार डेटा संरचना आप निर्माण कर रहे हैं, उसमें सहायक अनुक्रमणिका के रूप में डाइकेट बनाना पूरी तरह से ठीक है। "अच्छा अभ्यास" की धारणा पूरी तरह से संदर्भ-निर्भर है; क्या आपको कुंजियों के लिए O (1) लुकअप समय की आवश्यकता है? इसके अलावा, आप "सूचियों को शब्दकोशों में परिवर्तित नहीं कर सकते हैं" मनमाने ढंग से; यह पूरी तरह से शब्दार्थ पर निर्भर करता है। जैसे [(1,2), (1,3)]-> {1:3}आपकी चाबियों को बंद कर देगा और जानकारी खो देगा! एक तानाशाह O- (1) डालने / हटाने के समय के साथ एक-से-एक संबंध है। सूची एक सूची है।
नवजागेको

162
>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}

5
इसके अलावा एक और जवाब यह है कि एक ही पता चलता है पर टिप्पणी की: यह डुप्लिकेट टपल 'कुंजी' जैसे होने को कवर नहीं करता l=[('A',1), ('B',2), ('C',3), ('A', 2)]होने में परिणाम होगा 'A': 1जो वांछित परिणाम नहीं हो सकता।
गत

32

क्या आपने यह कोशिश की है?

>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}

ValueError: शब्दकोश अद्यतन अनुक्रम तत्व # 0 की लंबाई 1916 है; 2 की आवश्यकता है
फ्रेड विल्सन

यह मेरे टर्मिनल से एक सीधा cut'n'paste था, इसलिए इसे काम करना चाहिए। क्या आप यह दिखा सकते हैं कि आपने उस त्रुटि को प्राप्त करने के लिए क्या किया?
बेकार

@ फ़रमाया, तुमने कुछ गलत किया होगा, यह जवाब ठीक है।
मार्टिन

@FredWilson वह त्रुटि है जो आपको आमतौर पर तब मिलती है जब आप कुछ ऐसा प्रयास करते हैंdict([string1, string2, string3, string4])
chacham15

2
यह डुप्लिकेट टपल 'कुंजियों' को कवर नहीं करता है जैसे: l=[('A',1), ('B',2), ('C',3), ('A', 2)]परिणाम होगा 'A': 1जो वांछित परिणाम नहीं हो सकता है।
११

10

यहां डुप्लिकेट टपल "कुंजियों" को संभालने का एक तरीका है:

# An example
l = [('A', 1), ('B', 2), ('C', 3), ('A', 5), ('D', 0), ('D', 9)]

# A solution
d = dict()
[d [t [0]].append(t [1]) if t [0] in list(d.keys()) 
 else d.update({t [0]: [t [1]]}) for t in l]
d

OUTPUT: {'A': [1, 5], 'B': [2], 'C': [3], 'D': [0, 9]}

बहुत बढ़िया! मेरी मदद की।
अनपेयर्डगूड

बहुत बढ़िया !, बहुत मदद मिली
अथर्व

2

शब्दकोश समझ का उपयोग करने का दूसरा तरीका,

>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = { i:j for i,j in t }
>>> d
{'A': 1, 'B': 2, 'C': 3}

2

यदि टपल में कोई महत्वपूर्ण दोहराव नहीं है, तो यह सरल है।

tup = [("A",0),("B",3),("C",5)]
dic = dict(tup)
print(dic)

यदि टपल में प्रमुख दोहराव हैं।

tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = {}
for i, j in tup:
    dic.setdefault(i,[]).append(j)
print(dic)

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