繁体   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