从python目录中找出最大值
我是python新手,我有一个dict。我想从dict中找出最大值字段,比如索引0和1的dict中有一个公共值,即1。因此,我想确定最大值,它是0.8,需要指出从python目录中找出最大值,python,dictionary,Python,Dictionary,我是python新手,我有一个dict。我想从dict中找出最大值字段,比如索引0和1的dict中有一个公共值,即1。因此,我想确定最大值,它是0.8,需要指出 0: ['1', 'Metrolink', 0.7054569125175476], 1: ['1', 'Toronto', 0.8], 像wise一样,我希望对所有其他值也这样做 这是我完整的口述 d={ 0: ['1', 'Metrolink', 0.7054569125175476], 1: ['1', 'Toront
0: ['1', 'Metrolink', 0.7054569125175476],
1: ['1', 'Toronto', 0.8],
像wise一样,我希望对所有其他值也这样做
这是我完整的口述
d={
0: ['1', 'Metrolink', 0.7054569125175476],
1: ['1', 'Toronto', 0.8],
4: ['2', 'Residence Inn Bentonville', 0.721284806728363],
5: ['2', 'Bentonville, Arkansas', 0.8],
7: ['2', 'Rogers', 0.5609406232833862],
8: ['2', 'Toronto', 0.8],
10: ['2', 'Arkansas', 0.8871413469314575],
12: ['2', 'CA', 0.5339972972869873],
14: ['3', 'Toronto', 0.8],
19: ['3', 'ik', 0.555569052696228],
21: ['4', 'DL', 0.47785162925720215],
22: ['4', 'MS', 0.5182732939720154],
23: ['4', 'Nashville International Airport', 0.8],
27: ['4', 'Turkey', 0.8],
30: ['5', 'Hebron, Kentucky', 0.8],
32: ['5', 'OAK PARK', 0.6157999038696289],
35: ['5', 'USA', 0.5055036544799805],
36: ['5', 'Tennessee', 0.5752009153366089],
37: ['5', 'Recov', 0.6585434675216675],
38: ['5', 'County (United States)', 0.8],
40: ['6', 'SFO', 0.6019220948219299],
42: ['6', 'Ontario', 0.8],
45: ['7', 'United States', 0.6973987221717834],
47: ['7', 'Buckingham Gate', 0.8],
48: ['7', 'London', 0.9545853137969971],
53: ['8', 'Phoenix, Arizona', 0.8],
55: ['8', 'STE', 0.5046005249023438],
56: ['8', 'TULSA', 0.7144339680671692],
58: ['8', 'UNITED STATES OF AMERICA', 0.8454625606536865],
60: ['9', 'RDU', 0.6373313069343567],
61: ['9', 'Raleigh–Durham International Airport', 0.8],
65: ['9', 'Piauí', 0.8],
69: ['9', 'CAR', 0.6243148446083069],
71: ['10', 'MONMOUTH JUNCTION', 0.7259661555290222],
72: ['10', 'New Jersey', 0.8],
76: ['10', 'PVK', 0.6593300104141235],
79: ['10', 'TWW', 0.6495188474655151],
81: ['10', 'Morrisville, Bucks County, Pennsylvania', 0.8],
84: ['10', 'United States', 0.8],
88: ['10', 'New Brunswick, New Jersey', 0.8]
听起来您希望在每个子键(每个条目值的第一项)上获得最大值。为此,您可以使用以下方法:
from collections import defaultdict
max_values = defaultdict(lambda: (float('-inf'), None))
for label, text, value in d.values():
max_values[label] = max(max_values[label], (value, text))
在这里使用默认值为(float('-inf'),None)的defaultdict
允许我们将新的最大值与旧的新值进行比较,而无需首先检查是否记录了最大值
最大值
最终为:
{
'1': (0.8, 'Toronto'),
'2': (0.8871413469314575, 'Arkansas'),
'3': (0.8, 'Toronto'),
'4': (0.8, 'Turkey'),
'5': (0.8, 'Hebron, Kentucky'),
'6': (0.8, 'Ontario'),
'7': (0.9545853137969971, 'London'),
'8': (0.8454625606536865, 'UNITED STATES OF AMERICA'),
'9': (0.8, 'Raleigh–Durham International Airport'),
'10': (0.8, 'United States')
}
您可以使用以下代码获得已排序字典:
dict(sorted(d.items(), key=lambda kv:(int(kv[1][0]), kv[1][2])))
如果要根据第一个元素和第二个元素进行排序,请执行以下操作:
dict(sorted(d.items(), key=lambda kv:(int(kv[1][0]), kv[1][1])))
是处理类似表格数据的非常有效的工具。您可以从以下数据创建数据帧:
import pandas as pd
df = pd.DataFrame(d).T
df.columns = ('group', 'place', 'value')
然后打印出最大值
df[df['value']==df.groupby('group')['value'].transform('max')]
给
Out[41]:
组位置值
1多伦多0.8
102阿肯色州0.887141
143多伦多0.8
23 4纳什维尔国际机场0.8
27 4土耳其0.8
肯塔基州希布伦30 5 0.8
385县(美国)0.8
42 6安大略省0.8
48 7伦敦0.954585
58 8美利坚合众国0.845463
61 9罗利达勒姆国际机场0.8
65 9票0.8
72 10新泽西州0.8
宾夕法尼亚州巴克县莫里斯维尔81 10号0.8
84 10美国0.8
88 10新泽西州新不伦瑞克0.8
如果要以原始格式获取输出,可以使用
[47]中的df[df['value']==df.groupby('group')['value'].transform('max')].T.to_dict(orient='list'))
出[47]:
{1:[1',多伦多,0.8],
10:[2',阿肯色州,0.8871413469314575],
14:[3','多伦多',0.8],
23:[4',纳什维尔国际机场,0.8],
27:[4','Turkey',0.8],
30:[5',肯塔基州希布伦,0.8],
38:['5','县(美国)',0.8],
42:[6',安大略省,0.8],
48:[7',伦敦,0.9545853137969971],
58:[8',“美利坚合众国”,0.845462560536865],
61:[9',罗利达勒姆国际机场,0.8],
65:[9','Piauí',0.8],
72:[10',新泽西州,0.8],
81:[10','Morrisville,Bucks County,Pennsylvania',0.8],
84:[10',美国,0.8],
88:[10',新泽西州新不伦瑞克,0.8]}
简短解释
- 可以使用字典作为参数来创建数据帧。这些值应该是列表。
.T
只对表进行转置
df.groupby('group')['value']
返回一个SeriesGroupBy对象,其行为非常类似于常规pandas.Series对象。使用该方法,我们可以计算每个组
的最大值
df['value']==df.groupby('group')['value'].transform('max')
创建一个布尔掩码,用于通过df[mask]
选择最大行数
这是否回答了您的问题?这很有效。但是我想得到像Metrolink、Toronto等在max_值中有max值的文本。@Binny更新了答案以包括文本,让我知道它是否适用于您。某些组(4、5、8、10)有多个具有相同高值的条目;此方法不会列出组中具有最大值的所有条目。我可以仅从@Mario IshacGood solution的结果中获得多伦多、伦敦等文本吗?还可以使用transform(max)
而不是transform('max')
哦,是的,没有考虑max()
内置。