具有多个顺序条件的字典过滤

时间:2018-08-22 08:37:34

标签: python python-3.x dictionary

假设我有一个字典dict = {},其布局如下,其中X是力,Y是周期。我想过滤掉当前循环的力,该力低于上一个循环的最大力。

Key1   X     Y  
      100    3
      200    3
      300    3
      400    3  
      500    3
      600    3
      100    5
      200    5
      300    5
      400    5
      500    5
      600    5
      700    5          
      100    8
      200    8
      300    8
      400    8
      500    8
      600    8
      700    8      
      800    8

现在我的目标是通过比较X和Y来过滤列,例如:

dict_filter = {}
for k, v in dict.items():
    if (Y - Y.min() == 0) is True:
      dict_filter[k] = v
    elif X(Y) < X(Y.shift(-1)).max()
      dict_filter[k] = v

我知道它不是那样工作的,但这是我对此的一般想法。目标是要像

Key1   X     Y  
      100    3
      200    3
      300    3
      400    3  
      500    3
      600    3
      700    5
      800    8

但是对于字典中的所有键,值对。我尝试了许多不同的条件,但是无论我做什么,dict_filter都保持为空并且什么也没有发生。我首先尝试仅通过最小Y值对其进行过滤。

dict_filter= {k: v for k, v in res.items() if (v['Y'] - v['Y'].min() == 0 is True)}

也许我也应该在循环中添加Y?喜欢:

for k,v,Y in dict.items()

是否也要遍历Y值?

1 个答案:

答案 0 :(得分:0)

您的意思是只想让每个X获得最小的Y吗?试试这个:

想象您的输入文件就像

100 3
200 3
300 3
400 3
...

字典将是:

d = {}
for line in s.split('\n'):
    parts = line.trim().split()
    x = int(parts[0])
    y = int(parts[1])
    d.setdefault(x, []).append(y)
result = dict((k, min(v)) for k, v in d.iteritems())