如何从元组字典中对min / max进行排序?

时间:2015-01-15 18:11:15

标签: python sorting dictionary

src_type是元组字典,数据结构为(开始,结束,频率)

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)}

我想找到" start"和#34;结束"

的最大值

这些是我的解决方案:

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]

他们是一个更好的优雅解决方案吗?

3 个答案:

答案 0 :(得分: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())

答案 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()分解出去。

我选择使用startendfrequency的符号名称,这样可以提高代码的清晰度。

答案 2 :(得分:0)

看起来这可能有效:

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