arrival=[1,2,2,2,3,4]
duration=[5,1,2,3,1,90]
我想以此创建一个字典,所以应该是:
d={1:5,2:1,3:1,4:90}
因此对于重复的键= 2,应选择最小值= 1
我的代码是:
d = {}
for i in range(0,len(arrival)):
d[arrival[i]] = duration[i]
for key,val in d.items():
print(key,val)
但是这将获取重复键的最后一个值而不是最小值。
获得的结果:
d={1:5,2:3,3:1,4:90}
预期结果:
d={1:5,2:1,3:1,4:90}
答案 0 :(得分:3)
我这样做的方法是使用itertools.groupby
为duration
中的每个组在arrival
中找到最小值,并根据结果构建字典:
from itertools import groupby
it_arrival = iter(arrival)
mins = [min(v) for _,v in groupby(duration, key=lambda _: next(it_arrival))]
dict(zip(set(arrival), mins))
# {1: 5, 2: 1, 3: 1, 4: 90}
答案 1 :(得分:2)
简单地(没有其他汇总/分组):
arrival = [1,2,2,2,3,4]
duration = [5,1,2,3,1,90]
d = {}
for i, k in enumerate(arrival):
if k not in d or d[k] > duration[i]:
d[k] = duration[i]
print(d)
输出:
{1: 5, 2: 1, 3: 1, 4: 90}
答案 2 :(得分:0)
创建一个新字典,在字典中检查是否存在到达钥匙, 如果存在,则将值更新为现有值和密钥值的最小值, 否则不存在密钥,然后在该字典中添加密钥对
arrival=[1,2,2,2,3,4]
duration=[5,1,2,3,1,90]
res ={}
for i, v in zip(arrival, duration):
if i in res.keys():
res[i] = min(res[i], v)
else:
res.update({i:v})
print(res)
输出
{1: 5, 2: 1, 3: 1, 4: 90}
答案 3 :(得分:0)
这可以通过使用groupby
函数的Pandas库和使用min
条件进行汇总来轻松完成。
import pandas as pd
arrival=[1,2,2,2,3,4]
duration=[5,1,2,3,1,90]
df = pd.DataFrame({'arrival': arrival, 'duration': duration})
df = df.groupby(['arrival']).aggregate({'duration': 'min'})
data = df.to_dict()['duration']
[In]: data
[Out]:
{1: 5, 2: 1, 3: 1, 4: 90}