एक ही विचार है।
>>> data = [{'id1': 'a', 'price': '2', 'color': 'green'},
... {'id1': 'b', 'price': '5', 'color': 'red'},
... {'id1': 'a', 'price': '2', 'color': 'green'}]
एक अस्थायी शब्दकोश का निर्माण करें और फिर सूची समझ और शब्दकोश समझ का उपयोग कर इसे
>>> temp = {}
>>> for d in data:
... if d['id1'] not in temp:
... temp[d['id1']] = {}
... temp_d = temp[d['id1']]
... temp_d['price'] = temp_d.get('price', 0) + int(d['price'])
... temp_d.setdefault('colors', set()).add(d['color'])
...
>>> temp
{'a': {'colors': {'green'}, 'price': 4}, 'b': {'colors': {'red'}, 'price': 5}}
में मानों जमा, शब्दकोशों की सूची को फिर से संगठित।
>>> [{'id1': k, 'price': v['price'], 'colors': v['colors']} for k, v in temp.items()]
[{'id1': 'a', 'colors': {'green'}, 'price': 4}, {'id1': 'b', 'colors': {'red'}, 'price': 5}]
>>> data = [{'id1': 'a', 'price': '2'}, {'id1': 'b', 'price': '5'},
... {'id1': 'a', 'price': '2'}]
एक अस्थायी शब्दकोश, जहां हम अपने आईडी के खिलाफ की कीमतों की राशि accummulate कर सकते हैं बनाएँ,
>>> temp = {}
>>> for d in data:
... temp[d['id1']] = temp.get(d['id1'], 0) + int(d['price'])
...
>>> temp
{'a': 4, 'b': 5}
यहाँ हम temp
से और अगर यह d['id1']
का मूल्य प्राप्त करने की कोशिश नहीं मिला, 0 वापस आ जाएगा। इसके बाद हम वर्तमान शब्दकोश से price
जोड़ते हैं और परिणाम को वर्तमान आईडी 1 के विरुद्ध temp
में वापस स्टोर करते हैं।
फिर list comprehension और शब्दकोश समझ के साथ, शब्दकोशों की सूची को फिर से संगठित, इस
>>> [{'id1': k, 'price': temp[k]} for k in temp]
[{'price': 4, 'id1': 'a'}, {'price': 5, 'id1': 'b'}]
बहुत अच्छा। केवल समस्या यह है कि पहले नियम में वास्तव में एक अन्य मूल्य, रंग होता है, किसी एक मौके पर {'id1': 'a', 'price': '2', 'color': 'red'} मैं इसे कैसे रखूं अंतिम नियम? – DauleDK
@DauleDK क्या सभी शब्दकोशों में दिए गए 'id1' के लिए रंग समान होगा? उदाहरण के लिए, यदि 'id1'' a' है और क्या रंग हमेशा 'हरा' होगा? – thefourtheye
हमेशा नहीं, शायद मूल्यों को जोड़ना संभव है? – DauleDK