我想返回与number参数一样多的重复键,但是它不起作用
def duplicate_count(text, number):
count = {}
sen = str(text)
for spot in sen.lower():
count.setdefault(spot,0)
count[spot] = count[spot] +1
return count.keys == number
答案 0 :(得分:1)
您可以将返回值更改为此:
return [i for i in count if count[i] >= number]
此列表推导会创建一个列表,其中包含counts
中键的值大于或等于number
的键。
因此完整的方法将如下所示:
def duplicate_count(text, number):
count = {}
sen = str(text)
for spot in sen.lower():
count.setdefault(spot,0)
count[spot] = count[spot] +1
return [i for i in count if count[i] >= number]
duplicate_count('aaaassddd', 3) # returns ['a', 'd']
答案 1 :(得分:0)
我希望你需要这样的东西:
def duplicate_count(text, number):
a = str(text).lower()
return {i:a.count(i) for i in set(a) if a.count(i)==number}
duplicate_count("hhhaaafggggg",3)
{'h': 3, 'a': 3}
答案 2 :(得分:0)
您可以使用collections.Counter
,例如
[k for k, v in ct.Counter(str(text).lower()).items() if v >= n]
代码
更一般地,您可以使用标志来同时计算大小写字符串:
import collections as ct
def replicates(text, n=2, case_sensitive=False):
"""Return strings with counts >= n."""
s = str(text) if case_sensitive else str(text).lower()
return [k for k, v in ct.Counter(s).items() if v >= n]
假设您的意思是两个以上的重复值,我们使用了 replicates 。
演示
replicates("aaaaabbcddd", 3)
# ['a', 'd']
replicates("AAaAabbcDdd", 3, True)
# ['A']
答案 3 :(得分:0)
经典的解决方案是使用collections.Counter
,然后使用列表推导进行过滤。您还可以使用第三方NumPy,它可以通过矢量化操作更有效地执行过滤部分:
import numpy as np
def replicates(text, n=3):
values, counts = np.unique(list(text), return_counts=True)
return values[counts==n]
res = replicates('aaaeabbecddde')
print(res)
array(['d', 'e'], dtype='<U1')