2014-07-24 45 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}]) 
相关问题