Python从嵌套字典中提取最大值

时间:2015-11-25 11:43:25

标签: python dictionary

我有一个表格的嵌套字典:

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

这将返回'2015-01-03',所以我想有一个简单的模式,上面的一个班轮将给我我需要的但是让我难倒!

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

你想要

max(int(d['capacity']) for d in input_dict.values())

说明:

如果您不关心密钥,只需迭代嵌套的dicts(IOW外部字典的值)

也是你的内心决定能力&#34;值存储为字符串,我假设您要测试整数值。要找出差异,请检查:

>>> max(["1", "5", "18", "01"])
'5'
>>> max([1, 5, 18, 01])
18
>>> 

答案 1 :(得分: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
8

答案 2 :(得分: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时,会调用密钥,因此您可以获得key with highest capacity

的输出

备注:

  • 我在max函数中所做的是我称为词典item函数returns the key and value in List of set因为我使用了一个set列表作为测试样本我将得到一个set作为max的输出功能

  • 第一个值是key,第二个值是value

  • 因此在应用max函数后,我会得到一个带有两个值的集合,一个是密钥,另一个是它的相应值,因此您可以使用[1]['capacity']来获取capacity