在Python的字典列表中查找max len的所有字典

时间:2018-12-13 23:45:29

标签: python

我有一个字典列表

ld = [{'a':1}, {'b':2, 'c':3}, {'d':4, 'e':5}]

我需要从列表中获取长度最长的所有元素,即

{'b':2, 'c':3}` and `{'d':4, 'e':5}

我不太了解Python,但发现:

>>> max(ld, key=len)
{'b': 2, 'c': 3}`  

还有一个更好的解决方案,它返回最长字典的索引:

>>> max(enumerate(ld), key=lambda tup: len(tup[1]))
(1, {'b': 2, 'c': 3})

我想使用一个返回类似

的表达式
(1: {'b': 2, 'c': 3}, 2: {'d':4, 'e':5})

我觉得我离解决方案不远(或者也许我在),但我只是不知道如何得到它。

4 个答案:

答案 0 :(得分:7)

您可以在结构中找到最大字典的长度,然后使用列表理解:

ld = [{'a':1}, {'b':2, 'c':3}, {'d':4, 'e':5}]
_max = max(map(len, ld))
new_result = dict(i for i in enumerate(ld) if len(i[-1]) == _max)

输出:

{1: {'b': 2, 'c': 3}, 2: {'d': 4, 'e': 5}}

答案 1 :(得分:3)

Ajax1234提供了一个非常好的解决方案。如果您想要入门级的东西,这是一个解决方案。

ld = [{'a':1}, {'b':2, 'c':3}, {'d':4, 'e':5}]
ans = dict()
for value in ld:
     if len(value) in ans:
         ans[len(value)].append(value)
     else:
         ans[len(value)] = list()
         ans[len(value)].append(value)
ans[max(ans)]

基本上,您将字典中的所有内容相加以得到最大字典大小作为键,并以字典列表作为值,然后获得字典的最大大小列表。

答案 2 :(得分:2)

您可以通过多种方式在python中执行此操作。这是一个示例,说明了一些不同的python功能:

ld = [{'a':1}, {'b':2, 'c':3}, {'d':4, 'e':5}]
lengths = list(map(len, ld))  # [1, 2, 2]
max_len = max(lengths)  # 2
index_to_max_length_dictionaries = {
    index: dictionary
    for index, dictionary in enumerate(ld)
    if len(dictionary) == max_len
}
# output: {1: {'b': 2, 'c': 3}, 2: {'d': 4, 'e': 5}}

答案 3 :(得分:1)

找到最大长度,然后使用字典理解查找具有该长度的字典

max_l = len(max(ld, key=len))
result = {i: d for i, d in enumerate(ld) if len(d) == max_l}

这是您可以采用的最简单易读的方法

下面是另一种方法,一种更好(但更冗长)的方法

max_length = 0
result = dict()

for i, d in enumerate(ld):
    l = len(d)

    if l == max_length:
        result[i] = d
    elif l > max_length:
        max_length = l
        result = {i: d}

这是最有效的方法。只需在整个输入列表中迭代1次