【问题标题】:Extracting duplicates from a list of dictionaries in Python从 Python 中的字典列表中提取重复项
【发布时间】:2022-11-21 07:29:26
【问题描述】:

我有一个巨大的字典列表(为了清楚起见,我在这里缩短了它),其中一些值是重复的(假设“ID”是我的目标)。如何打印 ID 出现不止一次的字典?

[{'ID': 2501,
  'First Name': 'Edward',
  'Last Name': 'Crawford',
  'Email': 'c.crawford@randatmail.com',
  'Location': '[1.24564352 0.94323637]',
  'Registration': '12/12/2000',
  'Phone': '398-2890-30'},
 {'ID': 3390936,
  'First Name': 'Pepe',
  'Last Name': 'Slim',
  'Email': 'pepe.slim@somemail.com',
  'Location': '[1.7297525  0.54631239]',
  'Registration': '3/8/2020',
  'Phone': '341-3456-85'}]

我只能从 dict 列表中打印某些值,但无法解析并识别重复项。

all_phone = [i['Phone'] for i in comments]
all_email = [i['Email'] for i in comments]

【问题讨论】:

    标签: python dictionary list-comprehension


    【解决方案1】:

    您可以使用 collections.Counter 创建一个计数器,其中键将是您字典中的 IDs。然后你可以根据这个计数器过滤你的列表:

    lst = [
        {
            "ID": 2501,
            "First Name": "Edward",
            "Last Name": "Crawford",
            "Email": "c.crawford@randatmail.com",
            "Location": "[1.24564352 0.94323637]",
            "Registration": "12/12/2000",
            "Phone": "398-2890-30",
        },
        {
            "ID": 3390936,
            "First Name": "Pepe",
            "Last Name": "Slim",
            "Email": "pepe.slim@somemail.com",
            "Location": "[1.7297525  0.54631239]",
            "Registration": "3/8/2020",
            "Phone": "341-3456-85",
        },
        # duplicate ID here:
        {
            "ID": 2501,
            "First Name": "XXX",
            "Last Name": "XXX",
        },
    ]
    
    from collections import Counter
    
    # create a counter:
    c = Counter(d["ID"] for d in lst)
    
    # print duplicated dictionaries:
    for d in lst:
        if c[d["ID"]] > 1:
            print(d)
    

    印刷:

    {
        "ID": 2501,
        "First Name": "Edward",
        "Last Name": "Crawford",
        "Email": "c.crawford@randatmail.com",
        "Location": "[1.24564352 0.94323637]",
        "Registration": "12/12/2000",
        "Phone": "398-2890-30",
    }
    {"ID": 2501, "First Name": "XXX", "Last Name": "XXX"}
    

    【讨论】:

      【解决方案2】:

      您可以遍历列表并创建一个新字典,并在遇到重复项时捕获

      if key not in d:
          d[key] = value
      else:
          # you have a duplicate
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 2011-06-02
        • 2016-03-14
        • 2017-10-23
        • 2016-09-24
        • 2017-02-28
        • 2018-05-15
        相关资源
        最近更新 更多