我有一个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
。我的尝试是创建一个新的键值对 "value count",如下所示:
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"}]
在这种情况下,该函数应保留d1和d4。
- foobarbazd
具有相同数量的None
或当所有d
都至少包含一个None
时,应该发生什么? - AGN Gazer