【问题标题】:Remove duplicates from json file matching against multiple keys从与多个键匹配的 json 文件中删除重复项
【发布时间】:2018-03-22 18:12:00
【问题描述】:

原帖 = Remove duplicates from json data

这只是我的第二篇文章。我没有足够的分数来评论我对原始帖子的问题......所以我在这里。

Andy Hayden 提出了一个很好的观点 - “而且,这些并不是真正的重复...... – Andy Hayden”

我的问题就是这种情况...如何从 json 文件中删除重复项,但通过匹配 json 文件中的多个键?

这是原始示例:(有人指出它不是有效的json)

{
  {obj_id: 123,
    location: {
      x: 123,
      y: 323,
  },
  {obj_id: 13,
    location: {
      x: 23,
      y: 333,
  },
 {obj_id: 123,
    location: {
      x: 122,
      y: 133,
  },
}

我的情况与此示例非常相似,除了在我的情况下,它将保留所有这些,因为 obj_id 的 x 和 y 值是唯一的,但是如果 x 和 y 相同,则将从 json 文件中删除一个。

我发现的所有例子都只基于一个键匹配来踢出那些..

我不知道这是否重要,但我需要匹配的键是 "Company Name" 、 "First Name" 和 "Last Name" (它是公司和联系人的 100k 加行 json -有时同一个人是多家公司的联系人,这就是为什么我需要匹配多个键)

谢谢。

【问题讨论】:

  • 字典中的所有键都必须是唯一的,因此json.load() 或json.loads() 无法返回具有重复键值的键。这是 Python 字典和 JSON 对象之间的区别之一。获取对象的list 会很有用,因为这是可能的。
  • @martineau 确实如此,但 JSON 允许 arrays(或 Python 中的 lists),可以有重复...考虑:json.loads("[1,2,3,1,1]")跨度>
  • @Joe:我知道...这就是为什么我在评论中询问他们是否可以接受 list(又名 JSON 数组)中的对象。
  • @martineau 抱歉,但我不确定您的意思... OP 给出了输入数据的示例,作为列表或对象。
  • Joe:当我发表评论时,它是一本字典词典,但现在@MushroomMauLa 已更改它(我认为这不是 OP 的意图,所以我要去回滚他/她的更改)。

标签: python json duplicates


【解决方案1】:

我希望这能满足您的需求(它只检查名字和姓氏是否不同)

raw_data = [
        {
            "Company":123,
            "Person":{
                "First Name":123,
                "Last Name":323
            }
        },
        {
            "Company":13,
            "Person":{
                "First Name":123,
                "Last Name":323
            }
        },
        {
            "Company":123,
            "Person":{
                "First Name":122,
                "Last Name":133
            }
        }
    ]

unique = []
for company in raw_data:
    if all(unique_comp["Person"] != company["Person"] for unique_comp in unique):
        unique.append(company)

print(unique)

#>>> [{'Company': 123, 'Person': {'First Name': 123, 'Last Name': 323}}, {'Company': 123, 'Person': {'First Name': 122, 'Last Name': 133}}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多