【发布时间】:2021-07-17 08:03:14
【问题描述】:
我有一个数组,里面有一些字典。
虽然下面的方法可以实现。
但是我必须对返回的值做更多的处理,我认为这很糟糕。
有没有更好的办法?
data = [{'name': 'A'},
{'name': 'A'},
None,
None,
{'name': 'B'},
{'name': 'B'},
{'name': 'B'}]
process = list(map(lambda x: x.get('name') if isinstance(x, dict) else None, data))
result = max(process, key=process.count)
for _ in data:
if isinstance(_, dict) and _['name'] == result:
array_index = _
break
print(data.index(array_index))
{'name':'B'} 出现次数最多。
数据数组{'name':'B'}在哪里?
根据上面的例子,我想得到4。
但是上面的代码又要被for循环处理一遍,我觉得很不好。
【问题讨论】:
-
还有更优雅的 wat,例如使用
itertools或转换为 Pandas 系列并使用count_values(),但它们都像普通循环一样工作。实际上,我认为如果不检查所有列表项,您将无法做到。 -
使用 2 个单独的
for循环不会影响解决方案的时间复杂度。最后O(kn) = O(n)
标签: python python-3.x list dictionary