如何使等于数值参数的键值出现

时间:2018-07-30 18:41:09

标签: python python-3.x dictionary

我想返回与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 

4 个答案:

答案 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')