首页 > 解决方案 > 计算列表中不同的字典

问题描述

我有一个字典列表:[d1, d2, ...., d3]. 如何有效地(例如线性时间)计算列表中不同的字典?Python 可以正确比较字典:d1==d2. 字典、列表和集合是不可散列的。

标签: pythonpython-3.xlistdictionarycount

解决方案


假设您有一个字典列表,其中包含本身可散列的项目,那么您可以使用由另一个集合内部frozenset制成的a:.items()

>>> data = [{'a':1, 'b':2}, {'c':2, 'a':2}, {'b':2, 'a':1}, {'d':4}]
>>> {frozenset(d.items()) for d in data}
{frozenset({('c', 2), ('a', 2)}), frozenset({('a', 1), ('b', 2)}), frozenset({('d', 4)})}

就拿它的长度。

所以在上述情况下,

>>> len({frozenset(d.items()) for d in data})
3

推荐阅读