函数直方图返回一个字典,其中的键是字母,值是字母在传递给它的参数中出现的次数。
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的任何值,并返回True
或False
。
def has_duplicates(t):
histogram(t)
我很难访问直方图返回的字典中的值。
答案 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。也可以与其他序列一起使用。
注意:使用负比较'!='可以使函数对重复项进行肯定检查,而不是对没有重复项进行否定检查。
迈克尔