搜索字典中的键的值是否为2或更大

时间:2019-03-18 06:13:03

标签: python dictionary

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

def histogram(s):
    d = dict()
        for c in s:
            if c not in d:
                d[c] = 1
            else:
                d[c] += 1
    return d

我希望函数has_duplicates使用直方图。然后搜索返回的字典,以检查是否有大于1的任何值,并返回TrueFalse

def has_duplicates(t):
     histogram(t)

我很难访问直方图返回的字典中的值。

5 个答案:

答案 0 :(得分:2)

  • 您没有为histogram(t)函数中的任何内容分配has_duplicates

  • 您不需要重新发明轮子:collections.Counter会为您完成。

那么...是这样的吗?

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

答案 1 :(得分:0)

像这样:

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)

答案 2 :(得分:0)

假设它的python 3

s = {"a": 1, "b":3, "c":2, "d":4, "e":1}

s_new = {k:v for k,v in s.items() if v > 1}

print(s_new)

结果:

  

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

对于Python 2,使用iteritems()

答案 3 :(得分:0)

如果您只对是否存在重复感兴趣,那么当您较早地发现重复时,没有理由遍历整个词典:

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

collections.Counter对于计数histogram()中的字符很有用。

答案 4 :(得分:0)

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

但是,这是另一种方法,如果您的目标只是检查是否有重复的字符(或对象),那么您可能会想到很少的代码:

def has_dupes(t):
    return len(t) != len(set(t))

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

注意:使用负比较'!='可以使函数对重复项进行肯定检查,而不是对没有重复项进行否定检查。

迈克尔