【问题标题】:Removing certain keys in a dictionary [closed]删除字典中的某些键[关闭]
【发布时间】:2013-12-10 06:02:47
【问题描述】:

如果键的值在字典中重复,我需要创建一个删除键的函数。比如……

remove_dups({1:4, 2:4, 3:2})
{3:2}
remove dups({1:2, 2:5})
{1:2, 2:5}

我不知道该怎么做以及从哪里开始,请帮助! 需要知道如何在没有列表理解或导入的情况下执行此操作。

【问题讨论】:

标签: python dictionary key


【解决方案1】:
def remove_dups(d):
    c, result = {}, {}
    for item in d.values():
        c[item] = c.get(item, 0) + 1
    for k, v in d.items():
        if c[v] == 1:
            result[k] = v
    return result

最好和更简单的方法是使用Counter 和这样的dict理解

from collections import Counter
def remove_dups(d):
    c = Counter(d.values())
    return {k:v for k, v in d.items() if c[v] == 1}

【讨论】:

  • 抱歉,我忘了说我需要知道如何在没有列表解析或导入的情况下执行此操作。
  • @user3014764 请立即查看答案
  • @user3014764 不客气 :) 如果对您有帮助,请考虑接受这个答案meta.stackexchange.com/a/5235/235416
【解决方案2】:

字典有一个功能 - dict.values() - 将所有值作为列表获取

{1:4, 2:4, 3:2}.values() = [4,4,2]

然后您可以使用计数器(从集合导入计数器)-检查计数大于 1 的值并删除与 do 值关联的键。

(我没有给出完整的代码,因为这听起来像是一个家庭作业)

【讨论】:

  • 这不是家庭作业。我正在为我的期末考试而学习,看看我以前的考试,我被这个问题困住了,我只是想尽可能多地学习。
  • 没问题 - 继续上面的解决方案 - def remove_dups(d): c = Counter(d.values()) keys_to_remove = [] for k,v in d.iteritems(): if c[ v]>1: keys_to_remove.append(k) for k in keys_to_remove: del(dict[k])
猜你喜欢
  • 2011-02-17
  • 2021-02-23
  • 1970-01-01
  • 2019-10-31
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多