python - 在 Python 字典列表上实现 "select distinct ... from ..."

标签 python algorithm

这是我的问题:我有一个相同形式的 Python 字典列表,它们用于表示数据库中表的行,如下所示:

[ {'ID': 1,
   'NAME': 'Joe',
   'CLASS': '8th',
   ... },
  {'ID': 1,
   'NAME': 'Joe',
   'CLASS': '11th',
   ... },
  ...]

我已经编写了一个函数来获取此字典列表中特定字段的唯一值,这很简单。该函数实现了如下内容:

从...中选择不同的 NAME

但是,我希望能够得到多个唯一字段的列表,类似于:

从...中选择不同的 NAME、CLASS

我发现这很重要。是否有算法或 Python 包含的函数来帮助我解决这个难题?

在您建议将 CSV 文件加载到 SQLite 表或类似的东西之前,这不是我所处环境的选项,请相信我,这是我的第一个想法。

最佳答案

如果你想要它作为一个生成器:

def select_distinct(dictionaries, keys):
  seen = set()
  for d in dictionaries:
    v = tuple(d[k] for k in keys)
    if v in seen: continue
    yield v
    seen.add(v)

如果您想要其他形式的结果(例如,列表而不是生成器),不难改变它(例如,.append 到初始为空的结果列表而不是 yielding,最后返回结果列表)。

当然可以称为

for values_tuple in select_distinct(thedicts, ('NAME', 'CLASS')):
    ...

等等。

关于python - 在 Python 字典列表上实现 "select distinct ... from ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775528/

相关文章:

python - 如何修复 websocket-client Python 模块中的 CERTIFICATE_VERIFY_FAILED 错误?

python - 打印满足特定条件的值的列名和行名

python - 如何使用 Tensorflow 数据集进行 CNN 模型训练

algorithm - 如何暴力破解算术难题?

java - Scala:如何在有向图中查找并返回循环路径

string - KMP失效函数的应用

python - 对齐水平堆积条形图中的值标签 (Matplotlib)

python - 复制/写出所有实际使用的包命令

c++ - 使用 O(n) 时间和 O(1) 空间从数组中查找缺失的数字

algorithm - 使用最少击键次数的 N 个笑脸