获取与列表字典中的最大值对应的键

时间:2017-11-28 21:44:10

标签: python python-2.7 dictionary max

我有一个〜1000形式的对象字典:

d = {
   'ID1': [[a1, b1, c1, d1, e1, f1], [g1, h1, i1]],
   'ID2': [[a2, b2, c2, d2, e2, f2], [g2, h2, i2]],
}

键是字符串,而值是整数列表。

我想找到与以下三个差异中的每一个最大对应的字典键:(bγ - aγ)(dγ - cγ)(fγ - eγ),其中γ1:len(d)中的int。 这样做有效/ pythonic的方式是什么?

3 个答案:

答案 0 :(得分:1)

由于您的数据尚未排序,因此您需要对其进行暴力破解。但你可以做得更好一点:

diffs = [
    (k, v[0][1] - v[0][0], v[0][3] - v[0][2], v[0][5] - v[0][4])
    for k, v in d.items()
]
max(diffs, key=lambda t: t[1])[0] # b - a

答案 1 :(得分:0)

这似乎有效:

数据:

d={
 'a0': [[3, 3, 5, 2, 3, 3], [1, 1, 1]],
 'a1': [[1, 0, 1, 7, 5, 2], [1, 1, 1]],
 'a2': [[4, 9, 8, 8, 2, 8], [1, 1, 1]],
 'a3': [[5, 3, 4, 4, 9, 7], [1, 1, 1]],
 'a4': [[5, 5, 6, 7, 9, 9], [1, 1, 1]],
 'a5': [[8, 9, 7, 3, 1, 4], [1, 1, 1]],
 'a6': [[0, 9, 3, 3, 9, 9], [1, 1, 1]],
 'a7': [[3, 5, 1, 8, 7, 1], [1, 1, 1]],
 'a8': [[3, 7, 0, 0, 0, 4], [1, 1, 1]],
 'a9': [[6, 6, 4, 8, 0, 4], [1, 1, 1]]}

计算差异的函数:

def f(lst):
    if lst:
        a,b = lst.pop(),lst.pop()
        l=f(lst)
        l.append(a-b)
        return l
    else:
        return []

分四步解决:

l1=[f(d[n][0][:]) for n in d.keys()]        

l2=[[l[i] for l in l1] for i in range(3)]

l3=[l.index(max(l)) for l in l2]

l4=list(d.keys())

对于

print(l3,[l4[i] for i in l3]) 
[6, 7, 2] ['a6', 'a7', 'a2']   

或带有pandas的3行:

d1={ n : d[n][0] for n in d.keys()}   # prepare 
df=pd.DataFrame(d1).T.diff(axis=1).loc[:,1::2]  # sums 
print(df.apply(pd.Series.argmax))   # indexes of max

对于:

1    a6
3    a7
5    a2
dtype: object

答案 2 :(得分:0)

或者你可以{d}做max

d = {
   'ID1': [[0, 1, 2, 3, 4, 5], [1, 1, 1]],
   'ID2': [[0, 2, 4, 6, 8, 10], [2, 2, 2]],
}

diff = lambda d: [j-i for i, j in zip(d[:-1], d[1:])]
new_d = {k: max(diff(v[0])) for k, v in d.items()}
my_max_key = max(new_d)