簡體   English   中英

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

[英]Finding all the dicts of max len in a list of dicts

我有一個字典列表

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

我需要從我的列表中獲取所有長度最長的元素,即

{'b': 2, 'c': 3}{'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})

我覺得我離解決方案不遠(或者我可能是),但我只是不知道如何得到它。

您可以在結構中找到最大字典的長度,然后使用列表推導式:

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}}

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)]

基本上,您在字典中添加所有內容以獲得最大字典大小作為鍵,將字典列表作為值,然后獲得最大大小的字典列表。

在 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}}

找到最大長度,然后使用字典理解來查找具有該長度的字典

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 次

暫無
暫無

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

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