Usm*_*ool 3 dictionary list python-3.x
我有词典列表,如:
sel_list = [{'a': 8}, {'a': 4}, {'a': 4}, {'b': 8}, {'b': 9}]
Run Code Online (Sandbox Code Playgroud)
我想删除重复的词典,如果多个词典具有相同的键但值不同,则选择具有更高值的词典.
喜欢 :
sel_list = [{'a': 8}, {'b': 9}]
Run Code Online (Sandbox Code Playgroud)
我试过了:
[i for n, i in enumerate(sel_list) if i not in sel_list[n + 1:]]
Run Code Online (Sandbox Code Playgroud)
其结果如下:
[{'a': 8}, {'a': 4}, {'b': 8}, {'b': 9}]
Run Code Online (Sandbox Code Playgroud)
我能做些什么来实现我的成果?
我们可以通过构建一个字典来实现这一点,该字典通过每次选择最大值来"折叠"值.喜欢:
dummy = object()
maximums = {}
for subd in sel_list:
for k, v in subd.items():
cur = maximums.get(k, dummy)
if cur is dummy or v > cur:
maximums[k] = v
result = [{k: v} for k, v in maximums.items()]
Run Code Online (Sandbox Code Playgroud)
因此,我们迭代列表中字典的键值对,并且每次更新maximums字典以防密钥尚不存在,或者当前值更小.
在此迭代步骤之后,我们生成具有最大键值对的字典列表.
这种方法适用于所有可以排序的类型(数字,字符串等),并且密钥应该是可清除的,但是这个假设是成立的,因为在字典列表中,密钥已经被散列.
此外,它会在忽略空字典的意义上起到相当的作用,并且通过将这些字典值视为独立的键值对来处理具有多个键值对的字典.
您还可以决定maximums直接使用:包含原始列表中所有键的字典,并将这些键与列表中显示的最大值相关联.