比较两个字典项的值

2024-03-29 06:09:18 发布

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

我需要比较两个不同字典中项目的值。 假设字典RawData有表示电话号码和号码名称的项。你知道吗

例如,Rawdata有如下项:{'name': 'Customer Service', 'number': '123987546'} {'name': 'Switchboard', 'number': '48621364'}

现在,我得到了dictionary FilteredData,它已经包含了RawData中的一些项:{'name': 'IT-support', 'number': '32136994'} {'name': 'Company Customer Service', 'number': '123987546'}

如您所见,Customer Service和Company Customer Service都有相同的值,但键不同。在我的项目中,可能有数百个类似的重复项,我们只希望FilteredData中有唯一的数字。你知道吗

FilteredData是我们稍后将在代码中使用的,RawData将被丢弃。你知道吗

它们的名称(键)可以是完全重复的,但不能是数字(值)**

有两种方法可以做到这一点。你知道吗

A。删除RawData中的重复项,然后将其附加到FilteredData中。你知道吗

B。将它们附加到FilteredData中,然后遍历那里的数字(值),删除重复项。我能用一套吗?很明显,它会在一个列表上起作用。你知道吗

我不是在寻找最省时的解决方案。如果将来有人接替我的工作,我想要最简单易学的。在我的项目中,下一个编写代码的人必须快速掌握它。你知道吗

我已经看过了集合,并试图通过嵌套两个for循环来解决这个问题,但是有些东西告诉我应该有一个更简单的方法。你知道吗

当然,我可能错过了显而易见的解决办法。你知道吗

提前谢谢!你知道吗


Tags: 项目方法代码name名称number字典service
3条回答

如果您想更改过滤器数据当前的状态,可以使用dict并使用number作为键:

RawData = [
  {'name': 'Customer Service', 'number': '123987546'},
  {'name': 'Switchboard', 'number': '48621364'}
]

# Change how FilteredData is structured
FilteredDataMap = {
  '32136994': 
  {'name': 'IT-support', 'number': '32136994'},
  '123987546':
  {'name': 'Company Customer Service', 'number': '123987546'}
}

for item in RawData:
  number = item.get('number')
  if number not in FilteredDataMap:
    FilteredDataMap[number] = item

# If you need the list of items
FilteredData = list(FilteredDataMap.values())

您可以使用.values()从映射中提取实际列表

您可以做的是取一个dict.values(),创建一个set来删除重复项,然后遍历旧字典,找到第一个具有该值的键并将其添加到新字典中。保留集合,因为当您获得下一个dict条目时,请尝试将元素添加到该集合中,并查看集合的长度是否比添加之前的长度长。如果是,它是一个独特的元素,您可以将其添加到dict中

希望我能理解你的问题:

data = [{'name': 'Customer Service', 'number': '123987546'}, {'name': 'Switchboard', 'number': '48621364'}]
newdata = [{'name': 'IT-support', 'number': '32136994'}, {'name': 'Company Customer Service', 'number': '123987546'}]

def main():
    numbers = set()
    for entry in data:
        numbers.add(entry['number'])
    for entry in newdata:
        if entry['number'] not in numbers:
            data.append(entry)
    print data

main()

输出:

[{'name': 'Customer Service', 'number': '123987546'},
 {'name': 'Switchboard', 'number': '48621364'},
 {'name': 'IT-support', 'number': '32136994'}]

相关问题 更多 >