在字典内的列表列表中获取每个键的最大值列表

时间:2018-05-01 00:57:54

标签: python list dictionary nested-lists

我需要每个键的最大值列表。在以下示例中:

mydict = {
"day1": [[9],[2],[3]], 
"day2": [[4],[5],[6]],
"day3": [[3],[2],[1]]
}

我需要的是result=[9,6,3]

我试过了:

result = max(map(max, i) for i in worksheet.values())

但它只返回第一个键值。一如既往,非常感谢您提前。

5 个答案:

答案 0 :(得分:1)

虽然您可以使用简单的索引,但使用后者的解决方案不会针对具有任意深度的输入进行缩放。相反,使用递归max

flattened = lambda x:[c for h in [[i] if not isinstance(i, list) else flattened(i) for i in x] for c in h]
mydict = {'day2': [[4], [5], [6]], 'day3': [[3], [2], [1]], 'day1': [[9], [2], [3]]}
result = {a:max(flattened(b)) for a, b in mydict.items()}

输出:

{'day2': 6, 'day3': 3, 'day1': 9}

数据n级深度:

data = {3:[4, 5, 2, [4, [53, [4, 200]]]], 4:[[[56, 3], [4, [[5]]]]]}
new_result = [max(flattened(i)) for i in data.values()]

输出:

[200, 56]

答案 1 :(得分:1)

您可以使用itertools.chain.from_iterable删除一层嵌套:

>>> from itertools import chain
>>> 
>>> mydict = {
... "day1": [[9],[2],[3]], 
... "day2": [[4],[5],[6]],
... "day3": [[3],[2],[1]]
... }
>>> 
>>> list(map(max, map(chain.from_iterable, mydict.values())))
[9, 6, 3]

答案 2 :(得分:0)

你可以用这个嵌套列表理解来做到这一点:

bindFromRequest

<强>解释

内部列表理解:

Countries.form.fill

展平每个列表(字典值中的每个列表列表)。然后,当您遍历result = [max([i for sublist in mydict[k] for i in sublist]) for k in mydict] >>> result [9, 6, 3]

时,您可以为[i for sublist in mydict[k] for i in sublist] 中的每一个获取max()

答案 3 :(得分:0)

您可以使用Alex Martelli's列表flattening pattern创建一个包含每个列表列表最大值的新dict:

>>> {k:max(e for sl in l for e in sl) for k,l in mydict.items()} 
{'day2': 6, 'day3': 3, 'day1': 9}

相同的一般技术,您可以创建最大值列表:

>>> [max(e for sl in l for e in sl) for l in mydict.values()] 
[6, 3, 9]

(由于Python dicts在3.6之前的Python中是无序的,因此IMHO的价值有限)

当然,如果需要,可以对其进行分类:

>>> sorted([max(e for sl in l for e in sl) for l in mydict.values()], reverse=True) 
[9, 6, 3]

(但是哪个键有哪个最大?从你的问题中不清楚是否重要......)

答案 4 :(得分:-1)

您遇到的问题是内部元素也是列表,因此您必须解压缩它们。我的第一个建议是$('.log').click(function() { $('.loginform').css('display', 'block'); }); 的结构是错误的,如果这些内部列表中的每一个都应该只有一个元素长。可能它看起来像这样:

mydict

或者,您需要展平内部列表。我可能会这样做:

mydict = {
    "day1": [9, 2, 3], 
    "day2": [4, 5, 6],
    "day3": [3, 2, 1]
}

请注意,此版本取决于所订购的字典(对于最新版本的python来说是这样,但绝对不是所有版本。