2015-01-15 23 views
0

src_type與結構爲(開始,結束,頻率)中的數據元組的字典如何從元組字典中排序min/max?

In [303]: src_type 
Out[303]: 
{'A': (440468754.0, 442213325.0, 25), 
'B': (440448179.523912, 442202204.43813604, 285), 
'C': (440447107.044571, 442268070.552849, 4914), 
'D': (440448307.44081604, 442254145.172575, 443), 
'E': (440458084.535652, 442253729.048885, 3060)} 

我想找到的「開始」的最小和的「結束」

這些最大是我的解決方案:

1(簡單蹩腳)

end_ts = 0 
for i in src_type.values(): 
    if end_ts < i[1]: 
     end_ts = i[1] 
start_ts = end_ts 

for i in src_type.values(): 
    if start_ts > i[0]: 
     start_ts = i[0] 

2(與SO一些幫助有關排序{})

b = src_type.items() 
b.sort(key=lambda x:x[1][0]) 
min_start = b[0][1][0] 
b.sort(key=lambda x:x[1][1]) 
max_end = b[-1][1][1] 

他們是一個更好的優雅的解決方案?

回答

2

我會用min()max()generator expressions

In [6]: min(start for (start, end, frequency) in src_type.values()) 
Out[6]: 440447107.044571 

In [7]: max(end for (start, end, frequency) in src_type.values()) 
Out[7]: 442268070.552849 

你能因素如果你喜歡,可以出src_type.values()

我選擇使用start,endfrequency的符號名稱,就我的眼睛而言,這提高了代碼的清晰度。

3

可能:

b = src_type.values() 
min_start = min(x[0] for x in b) 
max_end = max(x[1] for x in b) 

這可能是由更短,但效率較低:

min_start = min(x[0] for x in src_type.values()) 
max_end = max(x[1] for x in src_type.values()) 
0

看起來像這可能工作:

start = min([item[0] for item in src_type.values()]) 
end = max([item[1] for item in src_type.values()]) 
+0

是的,這只是我的回答有略微低效率的版本。 – matsjoyce 2015-01-15 18:18:00

+0

是的,upvoted你的答案。謝謝! – amehta 2015-01-15 18:19:28

+0

你不應該使用列表 – 2015-01-15 18:21:50