[英]How to get the max value in a nested list?
我试图获得此列表中每个“国家”的MAX
价格。
my_list = [
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,012'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,153'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,114'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,109'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,252'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,113'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,116'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,250'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,266'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,112'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,025'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,224'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,256'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,245']]
这是我的代码:
max_price_per_list = []
for lst in my_list:
for price in lst:
max_value = price[-1]
max_price_per_list.append(max_value)
print(max_price_per_list)
我收到以下错误: TypeError: 'datetime.datetime' object is not subscriptable
当我 printend max_price_per_list
时,我期望得到以下结果:
['0,252', '0,266', '0,256']
您可以省略第二个循环以获取所需的列表。
max_price_per_list = []
for lst in my_list:
max_value = lst[-1]
max_price_per_list.append(max_value)
print(max_price_per_list)
但是,如果您想获得每个国家/地区的最大值,我建议您使用pandas
package。 您可以使用以下代码获取列表中每个国家/地区的最高价格:
import pandas as pd
df = pd.DataFrame(my_list)
df.groupby(0).max()
>>> 1 2 3
0
Italy Fish 2020-11-17 0,256
Morocco Fish 2020-11-17 0,252
Spain Fish 2020-11-17 0,266
我试图获得此列表中每个“国家”的最高价格。
见下文
import datetime
from collections import defaultdict
my_list = [
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,153'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,114'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,109'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,252'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,113'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,116'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,250'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,266'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,112'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,025'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,224'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,256'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,245']]
data = defaultdict(float)
for country in my_list:
price = float(country[-1].replace(',', '.'))
if price > data[country[0]]:
data[country[0]] = price
print(data)
output
defaultdict(<class 'float'>, {'Morocco': 0.252, 'Spain': 0.266, 'Italy': 0.256})
您不需要嵌套 for 循环。
您可以创建一个包含国家作为键和最大值作为值的字典。
country_max={}
for lst in my_list:
if lst[0] in country_max.keys():
if country_max[lst[0]]<lst[-1]:
country_max[lst[0]]=lst[-1]
else:
country_max[lst[0]]=lst[-1]
print([v for _,v in country_max.items()])
尝试这个:
import datetime
my_list = [
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,012'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,153'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,114'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,109'],
['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,252'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,113'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,116'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,250'],
['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,266'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,112'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,025'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,224'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,256'],
['Italy', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,245']]
max_prices_by_country = {}
for item in my_list:
price = max_prices_by_country.setdefault(item[0], 0)
max_prices_by_country[item[0]] = max(price, float(item[-1].replace(',', '.')))
max_price_per_list = [str(price).replace('.', ',') for price in max_prices_by_country.values()]
print(max_price_per_list)
你需要的是:
max_price_per_list = []
for lst in my_list:
max_value = lst[-1]
max_price_per_list.append(max_value)
print(max_price_per_list)
所以只有一个for循环。
您在做什么:使用第一个 for 循环,您将遍历列表中的列表。 使用第二个 for 循环,您将遍历该列表中的单个项目。 然后,您将获取该项目的最后一个元素。 由于字符串是可迭代的,您可以执行'Morocco'[-1]
它将返回o
,因为这是字符串的最后一项。 但是,日期时间 object 不允许下标。 即您不能在日期时间 object 上执行[-1]
。 这就是为什么它只与日期时间 object 而不是字符串对象崩溃的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.