【发布时间】:2018-10-31 09:07:09
【问题描述】:
我有一个 Python 3.5.2 中的字典列表,我正在尝试“去重”。所有字典都是唯一的,但我想对一个特定的键进行重复数据删除,以使字典具有最多的非空值。
例如,我有以下字典列表:
d1 = {"id":"a", "foo":"bar", "baz":"bat"}
d2 = {"id":"b", "foo":"bar", "baz":None}
d3 = {"id":"a", "foo":"bar", "baz":None}
d4 = {"id":"b", "foo":"bar", "baz":"bat"}
l = [d1, d2, d3, d4]
我想将 l 过滤为具有唯一 id 键的字典,保留空值最少的字典。在这种情况下,函数应该保留d1 和d4。
我试图为“值计数”创建一个新的键、值对,如下所示:
for d in l:
d['val_count'] = len(set([v for v in d.values() if v]))
现在我坚持的是如何过滤我的字典列表以获得唯一的ids,其中val_count 键是更大的值。
我对其他方法持开放态度,但由于资源限制,我无法在此项目中使用 pandas。
预期输出:
l = [{"id":"a", "foo":"bar", "baz":"bat"},
{"id":"b", "foo":"bar", "baz":"bat"}]
【问题讨论】:
-
如果你能提供一个预期输出的例子会很有帮助。您不成功尝试的描述并没有什么坏处,但在这种情况下它没有多大帮助。
-
@AGNGazer 我将进行更新以使其更加清晰,但我将其包含在帖子中:
In this case the function should keep d1 and d4. -
当所有
ds 具有相同数量的None或所有ds 至少包含一个None时会发生什么? -
@AGNGazer 我愿意在这种情况下只保留第一次出现。
标签: python python-3.x list dictionary duplicates