【问题标题】:How to find duplicate values in dictionaries如何在字典中查找重复值
【发布时间】:2013-12-26 02:30:35
【问题描述】:

我们如何从字典中查找和删除重复值及其键。

例子:

f = {1:4, 1:3, 4:4, 9:4, 5:7}

输出:

f = f = {1:3, 5:7}

如您所见,所有重复值 4 的键都已被删除...

还有一种方法可以跟踪删除了多少项目...在上述情况下,删除了 3 个项目。

【问题讨论】:

  • 我不知道从哪里开始......我已经搜索了很多......但我得到的所有答案都无法与我想要实现的目标联系起来。
  • 只需遍历f.values() 并为每个值再次遍历以查看是否有任何重复项,然后将其删除。虽然这会有点低效(O(n^2)
  • 不清楚您的结果字典中是否包含1:3,因为1:41:3 共享相同的键,因此其中一个将不存在,并且取决于输入顺序可能是1:3
  • @SethMMorton ...我正在寻找重复的“值”....
  • 我明白,我只是说不可能同时在字典中同时包含1:41:3,因此1:41:3 中的一个将丢失。如果 python 由于重复键而删除了条目,则不能有重复值。

标签: python python-3.x dictionary duplicates


【解决方案1】:

计算值:

import collections
value_occurrences = collections.Counter(f.values())

然后过滤掉出现多次的那些:

filtered_dict = {key: value for key, value in f.items()
                 if value_occurences[value] == 1}

要找出删除了多少,只需从旧字典中减去新字典的大小即可。

【讨论】:

  • @user3029969: import collections 首先。
  • 只是为了理解...... key:key的值,f.items()中的值......这行做什么
  • @user3029969:这是一个 dict 理解。对于原始dict中的每一个键值对,如果在我们统计的时候发现了一个值,那么这个键值对就会包含在新的dict中。
【解决方案2】:

要跟踪删除了多少项,您可以创建一个变量 = 0 ,然后每次删除某项时 += 变量加 1

您可以在执行此操作之前测量 len(f),然后在运行代码后测量 len(f),看看两者之间有什么区别,您会得到多少项目已被删除

【讨论】:

  • 啊,是的,这是一种有趣且简单的方法,可以计算出删除了多少项目...谢谢您的帮助!
【解决方案3】:

试试这个

list1=[]
f = {1:4, 1:3, 4:4, 9:4, 5:7}
for value in f.values():
        if value not in list1:
                list1.append(value)
for key in f.keys():
        if key in list1:
                del f[key]
return f

输出将是

{1: 3, 5: 7, 9: 4}

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 2010-11-19
    • 2019-06-07
    • 2022-01-22
    • 2012-09-14
    • 2021-04-25
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多