[英]Finding key value with the highest value
我一直试图在嵌套字典中找到最大值的键。 我已经有了一个“有效”的解决方案,但我想知道如何让它变得更好。
给定一个嵌套字典,例如:
data={
item_name_1: {
city_name1 : {price : 100, date: 22/10},
city_name2: {price :120, date: 22/10}
},
item_name_2: {
city_name1 : {price : 105, date: 22/10},
city_name2: {price :125, date: 22/10}
}
}
我想找到item_name
的最高值,以及该项目具有最高价值的城市。
我可以通过对字典中的所有item_names
进行 for 循环来做到这一点:
for item_name in data:
然后使用最大 function 找到最高价格:
max_value = max(data[item_name][i]["min_price"] for i in data[item_name])
然后遍历城市的键和值,找到与我的值匹配的键:
for k, v in data[item_name].items():
if data[item_name][k]["min_price"] == max_value:
print(k)
我想知道一种更好的方法来做到这一点,因为它有很多问题,比如两次循环。
如果可能的话,我想知道这是否可以仅使用max
function。 我看到了一些例子,并考虑做这样的事情:
max_value = max([(data[item_name][i]["min_price"],i) for i in data[item_name]], key=lambda x: data[item_name][i]["min_price"]])
尝试返回price
和city_name
的元组,但没有任何帮助将不胜感激!
使用.items()
和max()
的key=
参数。
item_highest = {}
for item_name, item_data in data.items():
item_highest[item_name] = max(
item_data.items(),
key=lambda pair: pair[1]["price"],
)
item_highest
最终会将项目名称映射到元组(city_name, {...}
),其中{...}
是城市的数据。
要最终获得您想要的元组,请进一步解包并重新打包:
item_highest = {}
for item_name, item_data in data.items():
city_name, city_data = max(
item_data.items(),
key=lambda pair: pair[1]["price"],
)
item_highest[item_name] = (
city_name,
city_data["price"],
)
使用dict comprehensions
的另一种方法:
步骤1:
Z = {y:max(data[y].items(), key=lambda x:x[1]['price']) for y in data.keys()}
(对于每个数据键,选择其中价格最高的值)然后Z
将是:
{'item_name_1': ('city_name2', {'price': 120, 'date': '22/10'}),
'item_name_2': ('city_name2', {'price': 125, 'date': '22/10'})}
第2步:
现在你可以相应地重塑它:
{x:(y[0], y[1]['price']) for (x,y) in Z.items()}
OUTPUT:
这导致:
{'item_name_1': ('city_name2', 120), 'item_name_2': ('city_name2', 125)}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.