2013-04-11 11 views
5

यहाँ tuples की मेरी सूची है:योग tuples अगर समान मूल्यों

regions = [(23.4, 12, 12341234), 
      (342.23, 19, 12341234), 
      (4312.3, 12, 12551234), 
      (234.2, 12, 12341234)] 

मैं tuples जहां सूचकांक 1 और 2 पर मान समान हैं की एक सूची में पहले इंडेक्स मान योग करने के लिए कोशिश कर रहा हूँ। ध्यान दें कि क्षेत्रों [0] और क्षेत्रों [3] सूचकांक 1 पर ही मान है और 2.

मेरे वांछित सूची है:

result = [(257.6, 12, 12341234), 
      (342.23, 19, 12341234), 
      (4312.3, 12, 12551234)] 

मुझे लगता है कि शायद मैं इसे एक शब्दकोश के रूप में पहली बचाने की जरूरत है , संभवतः दूसरी कुंजी के रूप में दूसरे मान के साथ और तीसरी मान दूसरी कुंजी के रूप में और संक्षेप में अगर यह पहले से मौजूद है। बस सोच रहा है कि कोई बेहतर या आसान तरीका है: मैं शायद कुछ अंतरण समारोह का उपयोग कर सोच रहा हूं।

+2

परिणामस्वरूप टुपल्स का क्रम क्या मायने रखता है? – NPE

+0

@ एनपीई नहीं, ऐसा नहीं है। – bozdoz

उत्तर

6
from collections import defaultdict 

sums = defaultdict(float) 
for c, a, b in regions: 
    sums[a, b] += c 
result = [(csum, a, b) for (a, b), csum in sums.iteritems()] 

ऐसा करने के लिए एक अंतर्निहित कार्य नहीं है; यह एक कार्य बहुत दूर है।

+0

मुझे इसे मारो - और अधिक पूरी तरह से :) –

+1

परिणाम रकम होना चाहिए, सही? – bozdoz

+0

और '.iteritems()' 'items() 'से बेहतर/अलग है? – bozdoz