2015-09-28 7 views
6

मान लीजिए कि मेरे पास स्ट्रिंग "abcdefghijklmnopqrstuvwxyz" है और मैं उन मानों के साथ शब्दकोश कुंजी प्रारंभ करना चाहता हूं।स्ट्रिंग में प्रत्येक वर्ण को एक शब्दकोश कुंजी में बदलें

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

alphabetDict = dict() 
for char in alphabet: 
    alphabetDict[char] = 0 

क्या ऐसा करने का कोई बेहतर तरीका है?

+0

http://stackoverflow.com/questions/1747817/python-create-a-dictionary-with-list-comprehension –

उत्तर

11

का उपयोग कर एक पंक्ति में कर सकते हैं कि आप dict.fromkeys() विधि का उपयोग कर सकते हैं -

>>> s = 'abcdefghijklmnopqrstuvwxyz' 
>>> alphaDict = dict.fromkeys(s,0) 
>>> alphaDict 
{'m': 0, 'p': 0, 'i': 0, 'n': 0, 'd': 0, 'w': 0, 'k': 0, 'y': 0, 's': 0, 'b': 0, 'h': 0, 't': 0, 'u': 0, 'q': 0, 'g': 0, 'l': 0, 'e': 0, 'a': 0, 'j': 0, 'c': 0, 'o': 0, 'f': 0, 'v': 0, 'x': 0, 'z': 0, 'r': 0} 

documentation -

fromkeys (सेक [, मूल्य से ])

seq और मानों से मूल्यों के साथ कुंजी के साथ एक नया शब्दकोश बनाएं।

fromkeys() एक क्लास विधि है जो एक नया शब्दकोश देता है। मान None पर डिफ़ॉल्ट है।

कृपया ध्यान दें, तो आप इस प्रयोग नहीं करना चाहिए अगर valuelist या किसी अन्य dict, आदि की तरह कुछ परिवर्तनशील है मूल्य केवल एक बार evaluted है जब आप विधि fromkeys() कहते हैं, और सभी चाबियाँ एक ही वस्तु को इंगित।

आप int, str की तरह मान के रूप में अपरिवर्तनीय प्रकार के लिए इसका उपयोग कर सकते, आदि


इसके अलावा, आप s या alphabet स्ट्रिंग निर्दिष्ट करने के लिए, आप के बजाय string.ascii_lowercase उपयोग कर सकते हैं की जरूरत नहीं है। उदाहरण -

>>> import string 
>>> alphaDict = dict.fromkeys(string.ascii_lowercase,0) 
>>> alphaDict 
{'m': 0, 'p': 0, 'i': 0, 'n': 0, 'd': 0, 'w': 0, 'k': 0, 'y': 0, 's': 0, 'b': 0, 'h': 0, 't': 0, 'u': 0, 'q': 0, 'g': 0, 'l': 0, 'e': 0, 'a': 0, 'j': 0, 'c': 0, 'o': 0, 'f': 0, 'v': 0, 'x': 0, 'z': 0, 'r': 0} 
4

आप पायथन में शब्दकोश समझें का उपयोग कर सकते हैं।

alphabetDict = {char: 0 for char in alphabet} 

Dictionaries (अजगर डॉक्स)

इस उत्तर और आनंद की ऊपर के बीच एक छोटी सी अंतर नहीं है। डिक्ट की समझ हर कुंजी के लिए मूल्य का मूल्यांकन करती है, जबकि fromkeys केवल एक बार करता है। यदि आप चींटियों जैसी चीजों का उपयोग कर रहे हैं, तो इसमें कोई समस्या नहीं है। हालांकि, अगर आप

d = {key: [] for key in <some set>} 
d[3].append(5) 
print(d[2]) 

आप

[] 

देता है और आपको अलग सूचियों है, जबकि

d = dict.fromkeys(<some set>, []) 
d[3].append(5) 
print(d[2]) 

आप देता है

[5] 

करने के लिए सभी कुंजी मैप कर देंगे एक ही सूची।

2

हाँ, आप dictionary comprehensions.

In [1]: alphabet = 'abcdefghijklmnopqrstuvwxyz' 

In [2]: {x:0 for x in alphabet} # dictionary comprehension 
Out[2]: 
{'a': 0, 
'b': 0, 
'c': 0, 
'd': 0, 
'e': 0, 
'f': 0, 
'g': 0, 
'h': 0, 
'i': 0, 
'j': 0, 
'k': 0, 
'l': 0, 
'm': 0, 
'n': 0, 
'o': 0, 
'p': 0, 
'q': 0, 
'r': 0, 
's': 0, 
't': 0, 
'u': 0, 
'v': 0, 
'w': 0, 
'x': 0, 
'y': 0, 
'z': 0} 
+1

धन्यवाद राहुल, यह एक बहुत अच्छा है। – user1767754

0

एक और दृष्टिकोण के साथ प्रयास किया।

dict(zip(alphabets, '0'*len(alphabets))) 
संबंधित मुद्दे