我有一个字典列表,比如:
dict_list = [
{"Module": abc, "Error": dgh, "Count": 12, Time: "kabs"},
{"Module": abc, "Error": dgh, "Count": 3, Time: "askdj"},
{"Module": aea, "Error": adsaw, "Count": 4, Time: "asna"
]
如您所见,每个字典都有相同的唯一键,但值相同或不同。例如,dict2["Modules"] == dict1["Modules"]
和dict2["Errors"] == dict1["Errors"]
的值与其他键值不同,如示例所示。
此实例称为重复实例。我想从列表中删除重复的词典,但要增加剩余词典的数量。你知道吗
我相信这就是你需要的:
根据给定的信息,这个问题只能回答一半。如果
Module
和Error
键中包含的内容是可散列的(例如字符串),那么它们可以用作字典的键。您可以构造一个中间字典,将元组(Module, Error)
作为唯一键,并检查它是否存在。如果它不存在,请存储字典。如果确实存在,则增加Count
。然后,该字典的值将包含原始列表中具有累计计数的唯一条目。你知道吗注意,这个函数并不关心每个字典中的
Time
(因为您没有提到它)。下面给出了使用示例。你知道吗另外,请注意,这会将现有的dictionary对象放入一个新列表中。也就是说,运行此功能后,原始列表中的词典将被更新。为了避免这种情况,您可以将
tupled_dictionary[key] = d
更改为tupled_dictionary[key] = d.copy()
。你知道吗如果
Module
和Error
是不可散列的,因为元组本身是可散列的,那么这种方法也可以工作。但是,您需要确保Module1 == Module2
返回您期望的值。如果Module
没有重写默认的类__eq__
函数,那么等式只存在于对象id
。(这可能是你想要的,很难说。)这可能会起作用。你知道吗
您可以创建一个没有重复项的新字典,并使键成为您希望没有重复项的值。例如
(d["Module"], d["Error"])
。然后,如果它已经存在,则增加计数。如果没有,则在字典中创建一个新条目。你知道吗但是,如果您的新密钥多于重复密钥,这将更有效,因为引发的异常更少:
更新:
如果您不想重置计数,代码如下:
或者
相关问题 更多 >
编程相关推荐