python - 如何从 Python 列表中删除重复的字典?

标签 python list python-2.7 dictionary duplicates

我有一个按特定键排序的字典列表。每个字典包含 32 个元素,列表中有 4000 多个字典。我需要代码来处理列表并返回一个删除了所有重复项的新列表。

来自这些链接的方法:

不要帮我,因为字典是不可散列的。

有什么想法吗?如果您需要更多信息,请发表评论,我会添加信息。

编辑:

重复字典可以是 list[dictionary][key] 具有相同值的任意两个字典。


好了,这里给需要的人详细解释一下。

我有一个这样的字典列表:

[ {
    "ID" : "0001",
    "Organization" : "SolarUSA",
    "Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Timothy Black",
   }, {
    "ID" : "0002",
    "Organization" : "SolarUSA",
    "Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Johen Wilheim",
   }, {
    "ID" : "0003",
    "Organization" : "Zapotec",
    "Matchcode" : "Zapotec, Something Street, Somewhere State, Whatev Zip",
    "Owner" : "Simeon Yurrigan",
   } ]

在这个列表中,第一个和第二个字典是重复的,因为它们的Matchcodes 是相同的。

现在这个列表按以下代码排序:

# sort_by is "Matchcode"
def sort( list_to_be_sorted, sort_by ):
    return sorted(list_to_be_sorted, key=lambda k: k[sort_by])

所以我有一个按Matchcode 排序的整洁的字典列表。现在我只需要遍历列表,访问 list[dictionary][key] 并在两个键值匹配时删除重复项。

最佳答案

正如您可以使用 tuple 来获得与 list 等效的可散列值一样,您可以使用 frozenset 来获得可散列等效值到 dict。唯一的技巧是您需要将 d.items() 而不是 d 传递给构造函数。

>>> d = {'a': 1, 'b': 2}
>>> s = frozenset(d.items())
>>> hash(s)
-7588994739874264648
>>> dict(s) == d
True

然后您可以使用您最喜欢的您已经见过的解决方案。将它们转储到 set 中,或者如果您需要保留顺序等,则使用 OrderedSetunique_everseen 配方等。例如:

>>> unique_sets = set(frozenset(d.items()) for d in list_of_dicts)
>>> unique_dicts = [dict(s) for s in unique_sets]

或者,保留顺序并使用键值:

>>> sets = (frozenset(d.items()) for d in list_of_dicts)
>>> unique_sets = unique_everseen(sets, key=operator.itemgetter(key))
>>> unique_dicts = [dict(s) for s in unique_sets]

当然,如果你有列表或嵌套在其中的字典,你将不得不递归地转换,就像你对列表的列表所做的那样。

关于python - 如何从 Python 列表中删除重复的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497973/

相关文章:

python -latexmk : error: no such option: -d

python - 导入 psycopg2 库未加载 : libssl. 1.0.0.dylib

python-2.7 - binascii.unhexlify 的奇数字符串错误

python-2.7 - Python Tkinter抛出Tcl错误

python - Pandas DataFrame 搜索列中可用列表中的所有字符串

python - 为什么在 numpy.arange() 上使用 numpy.array()?不是多余的吗?

python - Kivy - 如果满足条件,如何更改每个文本输入的颜色

python - 如何在Python中对列表中的词频进行排序(但不是全部打印出来)

python - 从 Python 列表中获取最多的 'diverse' 对集?

python - 通过列表 Python 进行搜索和查找