Python 如何计算具有更多嵌套列表/字典的列表中给定字符串的出现次数?

Python 如何计算具有更多嵌套列表/字典的列表中给定字符串的出现次数?,python,algorithm,recursion,Python,Algorithm,Recursion,在一个技术电话屏幕上,我得到了一个类似于下面的列表,并被要求计算字符串“a”出现的次数: input = ['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]] 正如您所看到的,除了“a”是列表中的一项外,它还可以是嵌套列表中的一项,以及嵌套字典中的键和/或值 这是迄今为止我在Python中使用的代码: def count_letter_a(arr): count = 0 for

在一个技术电话屏幕上,我得到了一个类似于下面的列表,并被要求计算字符串“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'
计数,或者简单地递归地将其直接应用于项目。这要求您也计算
元组中出现的次数(我包括
集合
以完成内置集合):

你真的很接近

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

请参阅:是否要对dicts的键和值进行计数?#@schwobasegll,是,dicts的键和值应进行countnice自适应,以包括
元组
设置
正确答案。不过,我不想使用
input
作为变量名。@schwobasegll,不确定在面试环境中是否允许使用sum和map,特别是如果此人不熟悉python的话。
count ('foo')
# 0

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

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