2013-02-14 14 views
6

मैं JSON कि विभिन्न कोड के टुकड़े संग्रहीत करता पार्स करने कर रहा हूँ और मैं पहली बार इन स्निपेट द्वारा इस्तेमाल किया भाषाओं की एक शब्दकोश का निर्माण कर रहा हूँ में एक बहु-आयामी शब्दकोश बनाने मैं स्निपेट के बारे में जानकारी को अपने शब्दकोश में उपरोक्त शब्दकोश में जोड़ना चाहता हूं। उदाहरण के लिए, अगर मैं एक जे एस टुकड़ा था - अंतिम परिणाम होगा:अद्यतन और अजगर

snippets = {'js': 
       {"title":"Script 1","code":"code here", "id":"123456"} 
       {"title":"Script 2","code":"code here", "id":"123457"} 
} 

पानी नहीं मैला करने के लिए - लेकिन PHP में एक बहु-आयामी सरणी मैं सिर्फ निम्न (मैं के लिए lookng रहा होगा पर काम कर कुछ समान):

snippets['js'][] = array here 

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

उत्तर

11

यह autovivification कहा जाता है:

आप इसे defaultdict

def tree(): 
    return collections.defaultdict(tree) 

d = tree() 
d['js']['title'] = 'Script1' 

साथ विचार सूचियां बनाना है, तो कर सकते हैं, आप कर सकते हैं:

d = collections.defaultdict(list) 
d['js'].append({'foo': 'bar'}) 
d['js'].append({'other': 'thing'}) 

defaultdict के लिए विचार यह जब कुंजी का उपयोग किया जाता है तो स्वचालित रूप से तत्व बनाने के लिए। बीटीडब्लू, इस साधारण मामले के लिए, आप बस कर सकते हैं:

d = {} 
d['js'] = [{'foo': 'bar'}, {'other': 'thing'}] 
+0

यह वही है जो मैं सुझाव देने जा रहा था, लेकिन अपने दूसरे कोड स्निपेट से ऐसा लगता है कि वह 'जेएस' को डिक्ट्स की सूची वापस करने के लिए चाहता है। – placeybordeaux

+0

@placeybordeaux मुझे वास्तव में पसंद नहीं है [php] (http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/), लेकिन मैं काफी हूँ सुनिश्चित करें कि उनकी "ऐरे" ऑब्जेक्ट चंद्रमा की स्थिति या उस तरह की कुछ चीज़ों के आधार पर सूची या एक ताना के रूप में व्यवहार कर सकती है ... – JBernardo

+0

मुझे PHP के लिए कोई प्यार नहीं है, लेकिन मैं 'snippets = {'js': {" id का जिक्र कर रहा था ":" 3 "} {" id ":" 2 "}}, ऐसा लगता है कि वह जेएस, टेक्स्ट, पायथन इत्यादि से जुड़ी डिक्ट्स की एक सूची चाहता है। मुझे डिफॉल्टडिक्ट्स और इससे भी ज्यादा बार-बार परिभाषित डिफॉल्टडिक्ट्स पसंद हैं, लेकिन ऐसा लगता है जैसे वे वही काम नहीं करेंगे जो वह चाहता है। – placeybordeaux

6

snippets = {'js': 
       {"title":"Script 1","code":"code here", "id":"123456"} 
       {"title":"Script 2","code":"code here", "id":"123457"} 
} 

से यह मेरे लिए लगता है कि आप शब्दकोशों की एक सूची है करना चाहते हैं। यहां कुछ पायथन कोड है जो उम्मीद कर सकते हैं कि आप

snippets = {'python': [], 'text': [], 'php': [], 'js': []} 
snippets['js'].append({"title":"Script 1","code":"code here", "id":"123456"}) 
snippets['js'].append({"title":"Script 1","code":"code here", "id":"123457"}) 
print(snippets['js']) #[{'code': 'code here', 'id': '123456', 'title': 'Script 1'}, {'code': 'code here', 'id': '123457', 'title': 'Script 1'}] 

क्या यह स्पष्ट करता है?

+0

हाँ ऐसा लगता है कि मुझे क्या चाहिए, मदद के लिए धन्यवाद! – gregwhitworth

+0

कूल, क्या आपको इसे और अधिक समझाया जाना चाहिए? अगर यह आपकी समस्या हल करता है तो कृपया जवाब स्वीकार करना याद रखें। – placeybordeaux

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