gpt4 book ai didi

python - 在多个键集上过滤 python 字典列表

转载 作者:行者123 更新时间:2023-11-28 20:56:25 26 4
gpt4 key购买 nike

假设我有字典:

my_dict = [
{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'James', 'middle': 'smith', 'last': 'joule'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'middle': 'Edward', 'last': 'Antonio'},
{'first': 'Robert', 'middle': 'edward', 'last': 'antonio'},
{'first': 'Robert', 'middle': 'edwrd', 'last': 'Antonio'},
{'first': 'James', 'middle': 'Jackson', 'last': 'harden'},
{'first': 'James', 'middle': 'jackson', 'last': 'Harden'},
]

我有一个名为 keys 的列表:

keys = ["first", "last"]

我想根据键中的每个值过滤 myDict,这将导致

filtered_dict = [
{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'middle': 'Edward', 'last': 'Antonio'},
{'first': 'James', 'middle': 'Jackson', 'last': 'harden'}
]

正如您在 my_dict 列表中的列表字典中观察到的那样,重复的字典值已从列表中删除或过滤掉,并且在过滤后的输出中仅采用该字典实例的第一个条目。

如果这两个键的值相同,我需要删除重复项。

有没有一种简单的方法可以通过 Python 中的字典/列表理解来做到这一点?有没有另一种更快的方法来实现这一目标?

最佳答案

您可以使用 itertools.groupby通过使用 key(x["first"].lower, x["last"].lower()) 进行分组,然后只取分组值的第 0 个元素:

from itertools import groupby
# https://docs.python.org/3/library/itertools.html#itertools.groupby

my_dict = [
{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'James', 'middle': 'smith', 'last': 'joule'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'middle': 'Edward', 'last': 'Antonio'},
{'first': 'Robert', 'middle': 'edward', 'last': 'antonio'},
{'first': 'Robert', 'middle': 'edwrd', 'last': 'Antonio'},
{'first': 'James', 'middle': 'Jackson', 'last': 'harden'},
{'first': 'James', 'middle': 'jackson', 'last': 'Harden'},
]

keys = ["first","last"]

k = [list(data)[0] for key,data in groupby(my_dict,
key=lambda x: tuple(x[i].lower() for i in keys))]

print(k)

输出:

[{'first': 'James', 'middle': 'Smith', 'last': 'Joule'}, 
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'middle': 'Edward', 'last': 'Antonio'},
{'first': 'James', 'middle': 'Jackson', 'last': 'harden'}]

警告:

Groupby 仅适用于连续的键 - 如果你在末尾有第三个 {'first': 'James', 'middle': 'Smith', 'last': 'JOUle'}在你的列表中,他会得到它自己的条目:

Make an iterator that returns consecutive keys and groups from the iterable
(from the doku, link above)

如果您希望所有列表都在同一组中,则需要先对列表进行排序以进行分组,然后连续排序。

关于python - 在多个键集上过滤 python 字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com