gpt4 book ai didi

python - 从映射列表中提取唯一项

转载 作者:行者123 更新时间:2023-11-28 20:54:48 24 4
gpt4 key购买 nike

他是一个有趣的问题,寻找最 Pythonic 的解决方案。假设我有一个映射列表 {'id': id, 'url': url}。列表中的一些 id 是重复的,我想创建一个新列表,删除所有重复项。我想出了以下功能:

def unique_mapping(map):
d = {}
for res in map:
d[res['id']] = res['url']

return [{'id': id, 'url': d[id]} for id in d]

我认为它非常有效。但是有没有一种“更 Pythonic”的方式呢?或者更有效的方法?

最佳答案

您的示例可以稍微重写以使用生成器表达式构造第一个字典,并消除构造另一个映射的必要性。只需重用旧的:

def unique_mapping(mappings):
return dict((m['id'], m) for m in mappings).values()

虽然这是单行的,但我仍然认为它的可读性很好。

在使用您的原始解决方案和我的解决方案时,您必须牢记两点:

  • 退回商品的顺序不一定与原来相同
  • 后面的条目将覆盖具有相同 ID 的先前条目

如果您不介意,那么我建议使用上面的解决方案。在其他情况下,此函数会保留顺序并优先处理首次遇到的 ID:

def unique_mapping(mappings):
addedIds = set()
for m in mappings:
mId = m['id']
if mId not in addedIds:
addedIds.add(mId)
yield m

如果您需要一个列表而不是生成器,您可能需要使用 list(unique_mappings(mappings)) 调用它。

关于python - 从映射列表中提取唯一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186131/

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