如何遍历字典作为范围

时间:2019-07-07 13:11:00

标签: python-3.x sorting dictionary

我有一本字典,其关键是视频的开始时间,其值为结束时间。每个键值对代表不同的组。如何检查号码是否在范围内。 例如:

dictvid = {146: 209, 509: 539, 0: 145, 304: 320}

0至539-210至303和321至508需要在另一本词典中 即

newgroup = {210:303,321:508}

2 个答案:

答案 0 :(得分:1)

您可以从每个键值对构造一个范围对象,这将为您提供O(n)解决方案(用于遍历字典的O(n)+用于每个内部 FocusNode focusNode = FocusNode(); @override Widget build(BuildContext context) => Scaffold( body: Column( children: <Widget>[ TextField( autofocus: true, onEditingComplete: (() => focusNode.requestFocus()) ), TextField( focusNode: focusNode, ) ] ) ); 检查的O(1)范围对象)。请注意in,因为范围对象最后是互斥的。

+ 1

输出

print(any(208 in range(start, end + 1) for start, end in dictvid.items()))
print(any(211 in range(start, end + 1) for start, end in dictvid.items()))

答案 1 :(得分:1)

from itertools import chain, groupby

dictvid = {146: 209, 509: 539, 0: 145, 304: 320}

i_from = 0
i_to = 539

out = dict()
s = sorted(set(range(i_from, i_to+1)).difference(chain.from_iterable(range(k, v+1) for k, v in dictvid.items())))
for _, g in groupby(enumerate(s), lambda v: v[0]-v[1]):
    l = [*g]
    out[l[0][1]] = l[-1][1]

print(out)

打印:

{210: 303, 321: 508}