2017-06-14 16 views
5

वहाँ एक सूचकांक सूची जो माता-पिता शब्दकोश के प्रमुख हो जाएगा के साथ:कैसे शब्दकोशों का एक शब्दकोश बनाने के लिए एकाधिक सूचियों

index = [1,2,3] 

और फिर एकाधिक सूचियों जिनमें से बच्चे dicts हो जाएगा:

डेटा जा रहा है
triangles = [4,5,6] 
circles = [7,8,9] 
squares = [10,11,12] 

अनुक्रमिक तत्वों, जिसका परिणाम:

{1:{'triangles':4, 'circles':7, 'squares': 10}, 
2: {'triangles': 5, 'circles': 8, 'squares': 11}, 
3: {'triangles': 6, 'circles': 9, 'squares': 12}} 

मैं कैसे कर सकते हैं यह करो ?

क्या आपको पांडा में करना आसान लगता है?

+4

हमें बताएं कि आप अब तक की कोशिश की? –

उत्तर

0

वास्तव में यह बहुत आसान है और एक सरल for -loop के साथ प्राप्त किया जा सकता है:

index = [1,2,3] 

triangles = [4,5,6] 
circles = [7,8,9] 
squares = [10,11,12] 

dictionary = {} 

for i in range(0, len(index)): 
    dictionary[index[i]] = {'triangles':triangles[i], 'circles':circles[i], 'squares':squares[i]} 

print(dictionary) 

आउटपुट:

{1: { 'त्रिकोण': 4, 'मंडलियां': 7 , 'वर्ग': 10}, 2: {'त्रिकोण': 5, 'मंडल': 8, 'वर्ग': 11}, 3: {'त्रिकोण': 6, 'मंडल': 9, 'वर्ग': 12 }}

1

बचाव के लिए डिक्ट्री संकलन! आधारित शून्य
ध्यान दें, Btw, आधारित एक है कि index में संग्रहीत सूचकांक होने लगते हैं, हालांकि अजगर सूचियों हैं:

result = {i : {'triangles' : triangles[i-1], 'circles' : circles[i-1], 'squares' : squares[i-1]} for i in index} 
0

आप कुछ इस तरह कर सकता है,

results = {} 
for index, item in enumerate(zip(triangles,circles,squares)): 
    results.update({index+1:{'triangles':item[0], 'circles':item[1], 'squares':item[2]}}) 

Out[6]: 
{1: {'circles': 7, 'squares': 10, 'triangles': 4}, 
2: {'circles': 8, 'squares': 11, 'triangles': 5}, 
3: {'circles': 9, 'squares': 12, 'triangles': 6}} 
1

सरलतम विधि dict comprehension साथ है:

>>> d = {i:{'triangles':triangles[i-1],'circles':circles[i-1],'squares':squares[i-1]} for i in index} 

{1: {'circles': 7, 'squares': 10, 'triangles': 4}, 
2: {'circles': 8, 'squares': 11, 'triangles': 5}, 
3: {'circles': 9, 'squares': 12, 'triangles': 6}} 
4

आप सूचियों zip कर सकते हैं subdicts बनाने और उसके बाद के साथ subdicts ज़िप सूचकांक सूचकांक पर प्रतिबंध; वे हो सकता है गैर sequencial/गैर संख्यात्मक:

dct = dict(zip(index, ({'triangles': i, 'circles': j, 'squares': k} 
          for i,j,k in zip(triangles, circles, squares)))) 
print(dct) 

{1: {'circles': 7, 'squares': 10, 'triangles': 4}, 
2: {'circles': 8, 'squares': 11, 'triangles': 5}, 
3: {'circles': 9, 'squares': 12, 'triangles': 6}} 

एक और नोट पर, यदि आप केवल अनुक्रमिक मायने रखता है की जरूरत है, सूचकांक सूची enumerate साथ बदला जा सकता:

dct = dict(enumerate(({'triangles': i, 'circles': j, 'squares': k} 
          for i,j,k in zip(triangles, circles, squares)), 1)) 
+1

यह वास्तव में बॉक्स समाधान से बाहर है :) + एक सर –

+1

सबसे अच्छा जवाब। :) – Haranadh

0

यदि आपको बहुत सारे चर मिल गए हैं और आप अपनी शब्दकोश समझ को हार्डकोड नहीं करना चाहते हैं, तो यह एक तरीका है।

नोट: आपको सभी चर घोषित करने की आवश्यकता है।

इसके अलावा आपको चर नामों की सूची घोषित करने की आवश्यकता है।

list_of_var_names = ['triangles', 'circles', 'squares'] 

dict(zip(index, [dict(zip(list_of_var_names, i)) 
      for i in (globals().get(i) for i in list_of_var_names)])) 

और चरण दर चरण विभाजित करने के लिए:

In [1]: index = [1,2,3] 
    ...: 
    ...: triangles = [4,5,6] 
    ...: circles = [7,8,9] 
    ...: squares = [10,11,12] 
    ...: 

In [2]: list_of_var_names = ['triangles', 'circles', 'squares'] 

In [3]: [globals().get(i) for i in list_of_var_names] # getting list of variable values in list_of_var_names order 
Out[3]: [[4, 5, 6], [7, 8, 9], [10, 11, 12]] 

In [4]: [dict(zip(list_of_var_names, i)) for i in (globals().get(i) for i in lis 
    ...: t_of_var_names)] 
Out[4]: 
[{'circles': 5, 'squares': 6, 'triangles': 4}, 
{'circles': 8, 'squares': 9, 'triangles': 7}, 
{'circles': 11, 'squares': 12, 'triangles': 10}] 

In [5]: dict(zip(index, [dict(zip(list_of_var_names, i)) 
    ...:     for i in (globals().get(i) for i in list_of_var_names)] 
    ...:)) 
    ...: 
Out[5]: 
{1: {'circles': 5, 'squares': 6, 'triangles': 4}, 
2: {'circles': 8, 'squares': 9, 'triangles': 7}, 
3: {'circles': 11, 'squares': 12, 'triangles': 10}} 

मैं एक बार और उल्लेख करना चाहते हैं इस समाधान है कि अगर अच्छा है अगर आप चर का एक टन हो और आप स्पष्ट रूप से नहीं करना चाहती dict समझ घोषित । अन्य मामलों में यह यहां प्रस्तुत किए गए अन्य समाधानों का उपयोग करने के लिए अधिक उपयुक्त और अधिक पठनीय होगा।

0

का उपयोग कर एक और किस्म डबल zip() और dict comprehension:

triangles = [4,5,6] 
circles = [7,8,9] 
squares = [10,11,12] 
index = [1,2,3] 

b = {k:{'triangles': x, 'circles': y, 'squares': z} for k, (x,y,z) in zip(
            index, zip(triangles, circles, squares))} 
print(b) 

आउटपुट:

{1: {'circles': 7, 'squares': 10, 'triangles': 4}, 
2: {'circles': 8, 'squares': 11, 'triangles': 5}, 
3: {'circles': 9, 'squares': 12, 'triangles': 6}} 
संबंधित मुद्दे