添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
 {'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'])

所以我想有一个简单的修改,可以让我得到我需要的东西,但我被难住了!"。

有什么想法吗?

5 个评论
替换代码0】这是你需要的吗?
@JonSurrell来晚了:P
也许你可以配置和使用这个答案stackoverflow.com/a/268285/3955539 for your problem.
@VigneshKalai 在最后也缺少['capacity'],它是返回完整条目。
是的,忘了这一点 @JonSurrell 谢谢
python
dictionary
Pete
Pete
发布于 2015-11-25
3 个回答
bruno desthuilliers
bruno desthuilliers
发布于 2015-11-25
已采纳
0 人赞同
max(int(d['capacity']) for d in input_dict.values())

解释一下。

如果你不关心键,只需迭代嵌套的数据(即外层数据的值)。

另外,你的内部数据集 "容量 "值是以字符串形式存储的,我假设你想测试的是整数值。要找出其中的区别,请看这个。

>>> max(["1", "5", "18", "01"])
>>> max([1, 5, 18, 01])
    
如果过于严格,这将返回int的修改值,而原始值是一个字符串。
Pete
也可以,而且我认为比其他答案更整齐,所以我将标记为正确。是的,我想测试整数值。通过csv dictreader读入的数据显示为字符串。
Netwave
Netwave
发布于 2015-11-25
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
    
The6thSense
The6thSense
发布于 2015-11-25
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: