【问题标题】:Updating Duplicate Dictionaries in Python在 Python 中更新重复的字典
【发布时间】:2021-11-24 21:01:45
【问题描述】:

我正在尝试删除 python 字典中的重复值。

我们有一个如下所示的 sn-p,

我想使用“数字”键并通过更新它们来删除重复项。

[
{
'Message': 'Fetched',
'Code': '200',
'Number': '20290775'
}, 
{
'Message': 'Fetched',
'Code': '202',
'Number': '20290776'
}, 
{
'Message': '',
'Code': '',
'Number': '20290775'
}, 
{
'Message': '',
'Code': '',
'Number': '20290776'
}, 
{
'Message': '',
'Code': '',
'Number': '20290777'
}, 
{
'Message': '',
'Code': '',
'Number': '20290778'
}, 
{
'Message': '',
'Code': '',
'Number': '20556729'
}

]

我们如何生成下面的sn-p

[ 
{
'Message': 'Fetched',
'Code': '200',
'Number': '20290775'
}, 
{
'Message': 'Fetched',
'Code': '200',
'Number': '20290776'
}, 
{
'Message': '',
'Code': '',
'Number': '20290777'
}, 
{
'Message': '',
'Code': '',
'Number': '20290778'
}, 
{
'Message': '',
'Code': '',
'Number': '20556729'
}

]

是否可以生成和删除重复的字典值?

【问题讨论】:

  • 为什么不把它变成一个以Number 为关键字的字典而不是一个列表呢?删除重复项的最简单方法是将构建这样的字典作为中间步骤——如果您可以选择首先将其设为字典,那么整个问题就会消失!
  • 当然是可能。当键匹配但其他条目不匹配时,您如何决定保留哪个版本?到目前为止您尝试了什么?
  • 当有“数字”匹配时,我想比较两个字典并使其成为单个字典。 @DavisHerring
  • 如果你可以使用 Pandas:pd.DataFrame(lst).sort_values(['Number', 'Code', 'Message']).drop_duplicates('Number', keep='last')
  • 请使用tour、阅读what's on-topic hereHow to Askquestion checklist,并提供minimal reproducible example。 “为我实现此功能”与此站点无关,因为 SO 不是免费的在线编码服务。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题

标签: python python-3.x list dictionary


【解决方案1】:

您可以执行以下操作以根据数字删除重复项:

result = []
for item in input_list:
    for element in result:
        if item["Number"] == element["Number"]:
            break
    else:
        result.append(item)
print(result)

对于您的示例,这将输出:

[{'Message': 'Fetched', 'Code': '200', 'Number': '20290775'}, {'Message': 'Fetched', 'Code': '202', 'Number': '20290776'}, {'Message': '', 'Code': '', 'Number': '20290777'}, {'Message': '', 'Code': '', 'Number': '20290778'}, {'Message': '', 'Code': '', 'Number': '20556729'}]

【讨论】:

  • if not result: 是多余的:循环已经立即退出(并运行它的else:)。
  • 你说得对,我已经更新了代码
【解决方案2】:

mylist = [ value for value in { value['number']:value for value in mylist }.values() ]

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 为了澄清上述评论,请考虑添加解释,因为这将大大提高您对 OP 和未来读者的回答质量
猜你喜欢
  • 2018-09-29
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2015-07-31
  • 1970-01-01
  • 2021-10-07
  • 2019-12-04
相关资源
最近更新 更多