Python 搜索字典中的键是否具有2或更大的值

Python 搜索字典中的键是否具有2或更大的值,python,dictionary,Python,Dictionary,函数histogram返回一个字典,其中键是字母,值是该字母在传递给它的参数中出现的次数 def histogram(s): d = dict() for c in s: if c not in d: d[c] = 1 else: d[c] += 1 return d 我希望函数有重复项使用直方图。然后搜索返回的字典,检查是否有大于1的值,返回True

函数histogram返回一个字典,其中键是字母,值是该字母在传递给它的参数中出现的次数

def histogram(s):
    d = dict()
        for c in s:
            if c not in d:
                d[c] = 1
            else:
                d[c] += 1
    return d
我希望函数
有重复项
使用直方图。然后搜索返回的字典,检查是否有大于1的值,返回
True
False

def has_duplicates(t):
     histogram(t)
我很难访问通过直方图返回的字典中的值。

类似于:

def has_duplicates(t):
   d = histogram(t)
   duplicates = [key for key, value in d.items() if value > 1]
   return True if duplicates else False
   # or just: return bool(duplicates)
像这样:

def has_duplicates(t):
   d = histogram(t)
   duplicates = [key for key, value in d.items() if value > 1]
   return True if duplicates else False
   # or just: return bool(duplicates)
  • 您没有将
    直方图(t)
    分配给
    has\u duplicates
    函数中的任何内容

  • 你不需要重新发明一个轮子:它会为你做的

所以。。。像这样的

from collections import Counter

def has_duplicates(s):
    counter = Counter(s)
    return {key: value > 1 for key, value in counter.items()}

has_duplicates([1, 2, 7, 2, 2])
# => {1: False, 2: True, 7: False}
如果您指的是单个
True
如果检测到任何重复项

def has_duplicates(s):
    counter = Counter(s)
    return any(value > 1 for value in counter.values())

has_duplicates([1, 2, 7, 2, 2])
# => True
  • 您没有将
    直方图(t)
    分配给
    has\u duplicates
    函数中的任何内容

  • 你不需要重新发明一个轮子:它会为你做的

所以。。。像这样的

from collections import Counter

def has_duplicates(s):
    counter = Counter(s)
    return {key: value > 1 for key, value in counter.items()}

has_duplicates([1, 2, 7, 2, 2])
# => {1: False, 2: True, 7: False}
如果您指的是单个
True
如果检测到任何重复项

def has_duplicates(s):
    counter = Counter(s)
    return any(value > 1 for value in counter.values())

has_duplicates([1, 2, 7, 2, 2])
# => True
假设它是python 3

s={a:1,b:3,c:2,d:4,e:1}
s_new={k:v代表k,s.items()中的v如果v>1}
打印(s_新)
结果:

{'d':4,'b':3,'c':2}

对于Python2,使用
iteritems()
假设其为Python3

s={a:1,b:3,c:2,d:4,e:1}
s_new={k:v代表k,s.items()中的v如果v>1}
打印(s_新)
结果:

{'d':4,'b':3,'c':2}


对于Python 2,使用
iteritems()

def has_duplicates(t):
    for v in t.values():
        if v > 1:
            return True
    return False

collections.Counter
但是,在计算
histogram()中的字符时,计数器非常有用。

如果您只关心是否有重复的字符,那么当您先前发现重复的字符时,就没有理由在整个字典中循环:

def has_duplicates(t):
    for v in t.values():
        if v > 1:
            return True
    return False

collections.Counter
但是,它对于计算
直方图()中的字符非常有用。
您可以在上面的帖子中找到问题的答案

但是,如果您的目标只是检查任何重复的字符(或对象),那么这里有另一种方法,您可以考虑使用少量代码:

set(t)将t中的字符串转换为一组字符。在转换过程中,所有重复项都会自动删除,因为集合只能保存每个对象一次。如果没有重复项,则将初始字符串的长度与所创建集合中的项数进行比较将返回True,如果在集合创建过程中至少删除了一个重复项,则返回False。这也适用于其他序列

注意:负面比较“!=”用于使函数对重复进行肯定检查,而不是对无重复进行否定检查


Michael

您可以在上面的帖子中找到问题的好答案

但是,如果您的目标只是检查任何重复的字符(或对象),那么这里有另一种方法,您可以考虑使用少量代码:

set(t)将t中的字符串转换为一组字符。在转换过程中,所有重复项都会自动删除,因为集合只能保存每个对象一次。如果没有重复项,则将初始字符串的长度与所创建集合中的项数进行比较将返回True,如果在集合创建过程中至少删除了一个重复项,则返回False。这也适用于其他序列

注意:负面比较“!=”用于使函数对重复进行肯定检查,而不是对无重复进行否定检查


Michael

将此添加到has_duplicates函数
返回len([v代表k,v在直方图(t)中。items()如果v>1])>1
@John Jefferson Bautista迭代这些项有特殊原因吗?如果您只想检查值,可以使用dict的方法.values()。@pistol2myhead这不是对您的问题的回答,而是一条建议:如果您的唯一目标是检查并执行一些操作,如果至少有一个字符出现两次,那么您可以使用短路。也就是说,在IF条件的ELSE块中加一个中断,因为一旦遇到第二种情况,结果就很清楚了。@MichaelS。你可以给op加上标签。我只是为了更好的格式编辑了这个问题。把它添加到has_duplicates函数
return len([v代表k,v在直方图(t)中。items()如果v>1])>1
@John Jefferson Bautista迭代这些项有什么特殊原因吗?如果您只想检查值,可以使用dict的方法.values()。@pistol2myhead这不是对您的问题的回答,而是一条建议:如果您的唯一目标是检查并执行一些操作,如果至少有一个字符出现两次,那么您可以使用短路。也就是说,在IF条件的ELSE块中加一个中断,因为一旦遇到第二种情况,结果就很清楚了。@MichaelS。你可以给op加上标签。我只是为了更好的格式编辑了这个问题。
计数器
对于在
直方图
中计数有意义,而不是在计数完成后查找重复项,否?@EndreBoth
计数器
直方图
的替代品-它们做同样的事情。它不用于“内部”
柱状图
。您是对的,计数器完全不需要单独的功能。
计数器
对于在
柱状图
中计数有意义,而不是在计数完成后查找重复项,否?@EndreBoth
计数器
是直方图
的替代品-它们的作用相同。它不适用于“内部”
柱状图
。您是对的,计数器完全不需要单独的函数。仅使用havin就有太多的开销