<p>根据给定的信息,这个问题只能回答一半。如果<code>Module</code>和<code>Error</code>键中包含的内容是可散列的(例如字符串),那么它们可以用作字典的键。您可以构造一个中间字典,将元组<code>(Module, Error)</code>作为唯一键,并检查它是否存在。如果它不存在,请存储字典。如果确实存在,则增加<code>Count</code>。然后,该字典的值将包含原始列表中具有累计计数的唯一条目。你知道吗</p>
<pre><code>def merge_and_sum_counts(list_of_dictionaries):
tupled_dictionary = {}
for d in list_of_dictionaries:
key = (d['Module'], d['Error'])
if key not in tupled_dictionary:
tupled_dictionary[key] = d
else:
tupled_dictionary[key]['Count'] += d['Count']
return tupled_dictionary.values()
</code></pre>
<p>注意,这个函数并不关心每个字典中的<code>Time</code>(因为您没有提到它)。下面给出了使用示例。你知道吗</p>
<pre><code>list_of_dictionaries = [
{'Module': 'A', 'Error': 'A', 'Count': 5, 'Time': '22:34'},
{'Module': 'A', 'Error': 'A', 'Count': 3, 'Time': '21:33'},
{'Module': 'A', 'Error': 'B', 'Count': 2, 'Time': '15:31'},
{'Module': 'B', 'Error': 'A', 'Count': 1, 'Time': '07:59'},
{'Module': 'B', 'Error': 'A', 'Count': 7, 'Time': '10:45'},
{'Module': 'B', 'Error': 'B', 'Count': 9, 'Time': '15:45'},
]
print merge_and_sum_counts(list_of_dictionaries)
# [{'Count': 8, 'Time': '07:59', 'Module': 'B', 'Error': 'A'},
# {'Count': 2, 'Time': '15:31', 'Module': 'A', 'Error': 'B'},
# {'Count': 8, 'Time': '22:34', 'Module': 'A', 'Error': 'A'},
# {'Count': 9, 'Time': '15:45', 'Module': 'B', 'Error': 'B'}]
</code></pre>
<p>另外,请注意,这会将现有的dictionary对象放入一个新列表中。也就是说,运行此功能后,原始列表中的词典将被更新。为了避免这种情况,您可以将<code>tupled_dictionary[key] = d</code>更改为<code>tupled_dictionary[key] = d.copy()</code>。你知道吗</p>
<p>如果<code>Module</code>和<code>Error</code>是不可散列的,因为元组本身是可散列的,那么这种方法也可以工作。但是,您需要确保<code>Module1 == Module2</code>返回您期望的值。如果<code>Module</code>没有重写默认的类<code>__eq__</code>函数,那么等式只存在于对象<code>id</code>。(这可能是你想要的,很难说。)</p>