{'2015-01-01': {'time': '8', 'capacity': '5'},
'2015-01-02': {'time': '8', 'capacity': '7'},
'2015-01-03': {'time': '8', 'capacity': '8'} etc}
这个字典是用dictreader从一个csv文件创建的。我希望能够做到的是返回容量的最大值。所以在这种情况下是8。
我可以使用。
for k,v in input_dict.items():
if temp_max < int(v['capacity']):
temp_max = int(v['capacity'])
这很有效,但我想知道是否有一个更简洁的方法?我搜索了一下,发现有一些方法可以提取与最大值相关的顶层键,这当然不是我所需要的。见下文。
max(input_dict, key=lambda v: input_dict[v]['capacity'])
所以我想有一个简单的修改,可以让我得到我需要的东西,但我被难住了!"。
有什么想法吗?
3 个回答
0 人赞同
max(int(d['capacity']) for d in input_dict.values())
解释一下。
如果你不关心键,只需迭代嵌套的数据(即外层数据的值)。
另外,你的内部数据集 "容量 "值是以字符串形式存储的,我假设你想测试的是整数值。要找出其中的区别,请看这个。
>>> max(["1", "5", "18", "01"])
>>> max([1, 5, 18, 01])
0 人赞同
在容量上取每一个数字,并检查其最大值。
>>> myDict = {'2015-01-01': {'time': '8', 'capacity': '5'},
'2015-01-02': {'time': '8', 'capacity': '7'},
'2015-01-03': {'time': '8', 'capacity': '8'} }
>>> max_capacity = max([int(i['capacity']) for i in myDict.values()])
>>> max_capacity
0 人赞同
你可以用一种漫长而无聊的方式来做这件事
print max(input_dict.items(), key=lambda v: int(input_dict[v[0]]['capacity']))[1]['capacity']
但是等等,为什么这个max(input_dict, key=lambda v: input_dict[v]['capacity'])
不起作用OMG
的原因是
当你调用max(input_dict, key=lambda v: input_dict[v]['capacity'])
时,input_dict的dicts键被调用,所以你得到的输出是key with highest capacity
。
Notes: