【问题标题】:How to remove duplicate dictionary based on selected keys from a list of dictionaries in Python?如何从 Python 中的字典列表中删除基于选定键的重复字典?
【发布时间】:2016-01-17 03:42:39
【问题描述】:

我是 Python 新手,并尝试尽可能多地学习它。我遇到了一个愚蠢的问题,我想根据选择性键值对删除列表中的某些字典项。例如,我有:

l = [{'A':1, 'B':2, 'C':3, 'D':4},
     {'A':5, 'B':6, 'C':7, 'D':8},
     {'A':1, 'B':9, 'C':3, 'D':10}]

我想要的输出是删除基于两个键 AC 值的字典:

l = [{'A':1, 'B':2, 'C':3, 'D':4},
     {'A':5, 'B':6, 'C':7, 'D':8}]

【问题讨论】:

  • 您似乎想保留第一个 (A,C) 对。是对的吗?您需要保留订单吗?
  • 是的@DSM 我只需要最终列表中具有唯一 (A,C) 键值对的字典。不,顺序并不重要。
  • 是的,很明显,您只想要 一个 可能具有相同 (A,C) 对的许多字典。但是您是否总是需要第一个,或者{'A':1, 'B':9, 'C':3, 'D':10} 也同样有效?
  • @DSM 我有同样的问题,只对第一个问题感兴趣。我应该如何解决这个问题?

标签: python list dictionary unique


【解决方案1】:

使用set 记住项目是否被看到。

>>> A, B, C, D = 'ABCD'
>>>
>>> lst = [
...     {A:1, B:2, C:3, D:4},
...     {A:5, B:6, C:7, D:8},
...     {A:1, B:9, C:3, D:10}
... ]
>>> seen = set()
>>> [x for x in lst if [(x[A], x[C]) not in seen, seen.add((x[A], x[C]))][0]]
[{'A': 1, 'C': 3, 'B': 2, 'D': 4}, {'A': 5, 'C': 7, 'B': 6, 'D': 8}]

【讨论】:

  • 感谢@falsetru 的解决方案。它起到了魅力! :)
  • A, B, C, D = 'ABCD' 的目的是什么?我想使用它,但我的 dict 的键是特定的字符串,例如slotSentence.
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2019-01-09
  • 2013-09-01
  • 2023-01-08
  • 1970-01-01
  • 2016-06-11
  • 2011-10-28
相关资源
最近更新 更多