删除Python中特定字典键的值中的重复项

2024-10-06 08:58:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要删除dict中特定键的重复值 例如

我很抱歉

data = [{'NAME':'John','AGE':23,'NUMBER':345},
        {'NAME':'Michel','AGE':23,'NUMBER':346},
        {'NAME':'RAHUL','AGE':23,'NUMBER':347},
        {'NAME':'Susea','AGE':23,'NUMBER':346},
        {'NAME':'Wincent','AGE':23,'NUMBER':342}]

在上面我需要唯一的'数字'键作为唯一的 注意:{'NUMBER':346}出现2次。 我需要输出

data = [{'NAME':'John','AGE':23,'NUMBER':'345'},
        {'NAME':'Michel','AGE':23,'NUMBER':346},
        {'NAME':'RAHUL','AGE':23,'NUMBER':347},
        {'NAME':'Wincent','AGE':23,'NUMBER':342}]

(即)删除特定密钥副本的任何副本记录

请帮帮我


Tags: namenumberagedata记录副本密钥数字
3条回答

这样做有效:

key = 'NUMBER'
seen = set()
res = []
for entry in data:
    if not entry[key] in seen:
        res.append(entry)
        seen.add(entry[key])

结果:

>>> res
[{'AGE': 23, 'NAME': 'John', 'NUMBER': 345},
 {'AGE': 23, 'NAME': 'Michel', 'NUMBER': 346},
 {'AGE': 23, 'NAME': 'RAHUL', 'NUMBER': 347},
 {'AGE': 23, 'NAME': 'Wincent', 'NUMBER': 342}]

使用set保存已经看到的值。对于大型列表,这比使用val in seen_list之类的列表要高效得多。你知道吗

创建唯一的编号列表。你知道吗

算法:

  1. uni_no是唯一的数字列表。你知道吗
  2. data1过滤进程的最终输出。你知道吗
  3. data上迭代loop
  4. 检查NUMBER是否存在迭代器项。你知道吗
  5. 如果没有,则添加到data1并将数字添加到uni_no

演示:

>>> data = [{'NAME':'John','AGE':23,'NUMBER':345},
...         {'NAME':'Michel','AGE':23,'NUMBER':346},
...         {'NAME':'RAHUL','AGE':23,'NUMBER':347},
...         {'NAME':'Susea','AGE':23,'NUMBER':346},
...         {'NAME':'Wincent','AGE':23,'NUMBER':342}]
>>> 
>>> data
[{'AGE': 23, 'NAME': 'John', 'NUMBER': 345}, {'AGE': 23, 'NAME': 'Michel', 'NUMBER': 346}, {'AGE': 23, 'NAME': 'RAHUL', 'NUMBER': 347}, {'AGE': 23, 'NAME': 'Susea', 'NUMBER': 346}, {'AGE': 23, 'NAME': 'Wincent', 'NUMBER': 342}]
>>> uni_no = []
>>> data1 = []
>>> for i in data:
...     if i["NUMBER"] not in uni_no:
...         uni_no.append(i["NUMBER"] )
...         data1.append(i)
... 
>>> data1
[{'AGE': 23, 'NAME': 'John', 'NUMBER': 345}, {'AGE': 23, 'NAME': 'Michel', 'NUMBER': 346}, {'AGE': 23, 'NAME': 'RAHUL', 'NUMBER': 347}, {'AGE': 23, 'NAME': 'Wincent', 'NUMBER': 342}]

像这样:

data = [{'NAME':'John','AGE':23,'NUMBER':345},
        {'NAME':'Michel','AGE':23,'NUMBER':346},
        {'NAME':'RAHUL','AGE':23,'NUMBER':347},
        {'NAME':'Susea','AGE':23,'NUMBER':346},
        {'NAME':'Wincent','AGE':23,'NUMBER':342}]

filtered_data = []
seen = set()
for item in data:
    number = item['NUMBER']
    if number not in seen:
        filtered_data.append(item)
        seen.add(number)
# filtered_data is deduped

相关问题 更多 >