簡體   English   中英

如何計算列表中嵌套列表/字典較多的給定字符串的出現?

[英]How do I count the occurrence of a given string in list that has more nested lists/dictionaries?

在技​​術電話屏幕上,為我提供了類似於以下的列表,並要求計算字符串'a'出現的次數:

input = ['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]]

如您所見,除了“ a”是列表中的一項之外,它還可以是嵌套列表中的一項,以及嵌套字典中的鍵和/或值。

這是我到目前為止在Python中擁有的代碼:

def count_letter_a(arr):

    count = 0

    for item in arr:
        if item == 'a':
            count += 1
        elif isinstance(item, list):
            count_letter_a(item)
        elif isinstance(item, dict):
            for k, v in item.items():
                pass

    return count

我一直在處理函數的字典鍵/值部分。 我需要做什么?

您可以僅添加鍵和值的'a'計數,或者簡單地將其直接遞歸地應用於項目。 這要求您還計算tuples出現次數(我提供了一些sets來完成內置集合):

def count_a(obj):
    if isinstance(obj, (list, tuple, set)):
        return sum(map(count_a, obj))
    if isinstance(obj, dict):
        return sum(map(count_a, obj.items()))
    if obj == 'a':
        return 1
    return 0

>>> x = ['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]]
>>> count_a(x)
7

你真的很親密!

def count (x):
  if isinstance (x, list):
    return sum (count (y) for y in x)
  elif isinstance (x, dict):
    return sum (count ([ k, v ]) for k,v in x.items ())
  elif x == "a":
    return 1
  else:
    return 0

它像這樣工作

count ('foo')
# 0

count ([ 'a', 'b', 'c' ])
# 1

count (['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]])
# 7

暫無
暫無

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

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