簡體   English   中英

如何使出現等數參數的鍵值

[英]How do I make the key values that equal number argument appear

我想返回與數字參數一樣多的重復鍵,但它不起作用

    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 

您可以將返回值更改為:

return [i for i in count if count[i] >= number]

此列表推導創建一個列表,其中包含值大於或等於number counts鍵。

所以完整的方法將如下所示:

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']

我希望你需要這樣的東西:

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}

你可以使用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("aaaaabbcddd", 3)
# ['a', 'd']

replicates("AAaAabbcDdd", 3, True)
# ['A']

經典的解決方案是使用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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM