我需要每个键的最大值列表。在以下示例中:
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())
但它只返回第一个键值。一如既往,非常感谢您提前。
答案 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来说是这样,但绝对不是所有版本。