2013-03-04 9 views
7

की सूची में अजगर शब्दकोश परम्युटेशन्स कम्बाइन एक शब्दकोश है कि इस तरह दिखता है यह देखते हुए:शब्दकोश

{ 
    'Color': ['Red', 'Yellow'], 
    'Size': ['Small', 'Medium', 'Large'] 
} 

मैं शब्दकोशों कि पहली शब्दकोश की कुंजियों की विभिन्न मूल्यों को जोड़ती है की एक सूची कैसे बना सकते हैं? क्या मैं चाहता हूँ है:

[ 
    {'Color': 'Red', 'Size': 'Small'}, 
    {'Color': 'Red', 'Size': 'Medium'}, 
    {'Color': 'Red', 'Size': 'Large'}, 
    {'Color': 'Yellow', 'Size': 'Small'}, 
    {'Color': 'Yellow', 'Size': 'Medium'}, 
    {'Color': 'Yellow', 'Size': 'Large'} 
] 
+0

यह एक अच्छा सवाल होगा यदि आपने हमें दिखाया कि आपने क्या प्रयास किया है। – msvalkon

+1

मैं कहूंगा कि यह किसी भी मामले में एक अच्छा सवाल है क्योंकि यहां सही अवधारणा के साथ आना आसान नहीं है। –

उत्तर

22

मुझे लगता है कि आप कार्तीय उत्पाद है, न कि क्रमचय, जिस स्थिति में itertools.product मदद कर सकते हैं:

>>> from itertools import product 
>>> d = {'Color': ['Red', 'Yellow'], 'Size': ['Small', 'Medium', 'Large']} 
>>> [dict(zip(d, v)) for v in product(*d.values())] 
[{'Color': 'Red', 'Size': 'Small'}, {'Color': 'Red', 'Size': 'Medium'}, {'Color': 'Red', 'Size': 'Large'}, {'Color': 'Yellow', 'Size': 'Small'}, {'Color': 'Yellow', 'Size': 'Medium'}, {'Color': 'Yellow', 'Size': 'Large'}] 
+1

+1। यह जानना अच्छा है कि पाइथन 'ज़िप()' और '.values ​​()' दोनों के लिए, वही, पुनरुत्पादित क्रम में शब्दकोश वस्तुओं पर फिर से शुरू होता है! –

+2

@TimPietzcker: हाँ, यह संपत्ति [दस्तावेज] है (http://docs.python.org/2/library/stdtypes.html#dict.items) और इस पर भरोसा किया जा सकता है। आदेश स्वयं मनमाने ढंग से है, लेकिन कोई अनुपालन पायथन कार्यान्वयन गारंटी का उल्लंघन नहीं कर सकता है कि यदि आप 'd',' d.keys() '(यहां' d') और 'd.values ​​()' को मेल नहीं करना चाहते हैं । – DSM

+0

यह वही है जो मैं चाहता था! धन्यवाद। – user1272534

1

आपको लगता है कि परिणाम प्राप्त कर सकते हैं यह कर:

x={'Color': ['Red', 'Yellow'], 'Size': ['Small', 'Medium', 'Large']} 
keys=x.keys() 
values=x.values() 

matrix=[] 
for i in range(len(keys)): 
    cur_list=[] 
    for j in range(len(values[i])): 
      cur_list.append({keys[i]: values[i][j]}) 
    matrix.append(cur_list) 

y=[] 
for i in matrix[0]: 
    for j in matrix[1]: 
      y.append(dict(i.items() + j.items())) 

print y 

परिणाम:

[{'Color': 'Red', 'Size': 'Small'}, {'Color': 'Red', 'Size': 'Medium'}, {'Color': 'Red', 'Size': 'Large'}, {'Color': 'Yellow', 'Size': 'Small'}, {'Color': 'Yellow', 'Size': 'Medium'}, {'Color': 'Yellow', 'Size': 'Large'}]