2014-07-24 44 views
1

我正在使用SQLAlchemy查詢數據庫。結果輸出是一個詞典列表。Python:跟蹤字典中特定值的最佳方法

樣本輸出

[{'status': 'complete', 'value': '1', 'question': 'q1', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q2', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q3', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '0', 'question': 'q4', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q5', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q1', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q2', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q3', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q4', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q5', 'user_name': u'Charlie', 'id': 4018647}] 

我需要跟蹤的值的相應問題。即

如果有兩個'q5'列我需要增加值。

所需的輸出:

[Charlie, q1, 2], [Charlie, q2, 2] 

但由於第四季度的1具有的值爲0,這將是

[Charlie, q4, 1] 

回答

1

這個怎麼樣?

# Results container 
results = {} 

# Collect the data 
for item in data: 
    # key here is just for later, 
    # you could use anything unique to the entry 
    # (username for example) 
    key = "{0}.{1}".format(item.get('user_name'), item.get('question')) 
    if key in results: 
     results[key] += item.get('value', 0) 
    else: 
     results[key] = item.get('value', 0) 

# Prints the results as you would like. 
for key, count in results.iteritems(): 
    name, question = key.split('.') 
    print [name, question, count] 
+0

感謝您的上述。在成功的時候會給這個投票和最後的投票。雖然它看起來可能適合我的需求,非常感謝! – Donatello

0

將結果合併在一起。

def merge_dicts(results): 
    out = {} 
    for result in results: 
     res = out.get(result["question"]) 
     if res is None: 
      result["value"] = int(result["value"]) 
      res = result 
     else: 
      res["value"] += int(result["value"]) 
     out[res["question"]] = res 
    return out.values() 

a = merge_dict([{'status': 'complete', 'value': '1', 'question': 'q1', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q2', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q3', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '0', 'question': 'q4', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q5', 'user_name': u'Charlie', 'id': 4054810}, 
{'status': 'complete', 'value': '1', 'question': 'q1', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q2', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q3', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q4', 'user_name': u'Charlie', 'id': 4018647}, 
{'status': 'complete', 'value': '1', 'question': 'q5', 'user_name': u'Charlie', 'id': 4018647}]) 
相關問題