这是我的问题:我有一个相同形式的Python字典列表,用于表示数据库中表的行,如下所示:
[ {'ID': 1,
'NAME': 'Joe',
'CLASS': '8th',
... },
{'ID': 1,
'NAME': 'Joe',
'CLASS': '11th',
... },
...]
Run Code Online (Sandbox Code Playgroud)
我已经编写了一个函数来获取这个字典列表中特定字段的唯一值,这是微不足道的.该函数实现了类似的东西:
select distinct NAME from ...
但是,我希望能够获得多个唯一字段的列表,类似于:
select distinct NAME, CLASS from ...
我发现这是非平凡的.是否有算法或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)
Run Code Online (Sandbox Code Playgroud)
如果你想要一些其他形式的结果(例如,列表而不是生成器),则不难改变它(例如,.append改为最初为空的结果列表而不是yielding,并在结尾处返回结果列表).
当然,被称为
for values_tuple in select_distinct(thedicts, ('NAME', 'CLASS')):
...
Run Code Online (Sandbox Code Playgroud)
等等.