如何在字典中找到最小值{键:列表}?

2024-09-30 01:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在字典里找到最低机票价格,它看起来像:

{datetime.date(2018, 12, 16): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 24): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 25): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 27): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 18): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 19): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 20): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 23): ['KL', 'AMS', '59.84'],
  datetime.date(2018, 12, 17): ['AF', 'AMS', '70.24'],
  datetime.date(2018, 12, 21): ['SK', 'AMS', '97.93'],
  datetime.date(2018, 12, 26): ['SK', 'AMS', '97.93'],
  datetime.date(2018, 12, 28): ['SK', 'AMS', '97.93'],
  datetime.date(2019, 1, 2): ['SK', 'AMS', '97.93'],
  datetime.date(2019, 1, 3): ['SK', 'AMS', '97.93'],
  datetime.date(2018, 12, 29): ['AF', 'AMS', '111.64'],
  datetime.date(2018, 12, 31): ['EW', 'AMS', '127.51'],
  datetime.date(2019, 1, 1): ['EW', 'AMS', '127.51'],
  datetime.date(2018, 12, 30): ['EW', 'AMS', '147.51'],
  datetime.date(2018, 12, 22): ['KL', 'AMS', '148.84']}

第一个键是datetime,值=信息列表。我试着简单地得到这个时间序列的最大和最小价格。我试过以下方法:

_tempPairAndPrices = {}
for item in permutations(destinations[1:],2):    
    #try:
    key_max = max(_fltDictTemp_CachedData[item].keys(),key=(lambda k: _fltDictTemp_CachedData[item][k]))
    key_min = min(_fltDictTemp_CachedData[item].keys(),key=(lambda k: _fltDictTemp_CachedData[item][k]))
    maxPx = _fltDictTemp_CachedData[item][key_max]
    minPx = _fltDictTemp_CachedData[item][key_min]

    _tempPairAndPrices[item] = {'maxPx':maxPx,'minPx':minPx}

我不认为它是正确的访问信息列表,虽然,因为它没有正确地分配最大值和最小值。。。(通常是我的最小值>;>;最大值)

谢谢!你知道吗


Tags: keydatetimedateminitemmaxskams
2条回答

IIUC,将^{}key一起使用

[min(v.values(), key=lambda x: float(x[-1])) for k,v in d.items()]

输出

[['KL', 'AMS', '59.84']]

对于您编辑的数据,只需

min(d.values(), key=lambda x: float(x[-1]))

如果您只是想得到最低的机票价格,这是一个可能的解决方案:

prices = [float(i) for i in np.array(dict.values()[0].values())[:,-1]]
min_price = min(prices)

其中dict是您的字典。我在列表理解中使用np.array()的原因是为了使用索引[:,-1],因为价格是列表的最后一个元素。但我看到有几种价格是相等的和最低的。我不知道你打算怎么对付他们。当然,您可以将以上两行合并为一行,然后写下:

min_price = min([float(i) for i in np.array(dict.values()[0].values())[:,-1]])

相关问题 更多 >

    热门问题