【发布时间】:2018-07-31 09:13:07
【问题描述】:
我有一本类似的字典:
{'A': [0, 2, 5],
'B': [1],
'C': [3, 6, 9],
'D': [4, 7, 10],
'E': [8, 11, 13],
'F': [12]}
并且我想根据值列表中连续元素的差异将其拆分为多个字典(例如 2)。比如上图:
dict_2 = {'A': [0, 2],
'E': [11, 13]}
dict_3 = {'A': [2, 5],
'C': [3, 6, 9],
'D': [4, 7, 10],
'E': [8, 11]}
所以我比较每个列表中的连续值,如果差(i+1) - i是2,我把它放在dict_2,如果是3,我把它放在dict_3。我忽略每个列表只有一个元素或差异不是 2 或 3 的那些。
我正在尝试一种相当麻烦的方法:
def construct_dicts(init_dict, no_jumps=[2,3]):
dct_2, dct_3 = {}, {}
for key in init_dict.keys():
for index in range(len(init_dict[key])):
if init_dict[key][index+1] - init_dict[key][index] = no_jumps[0]:
dct_2[key] = [index, index + 1]
elif init_dict[key][index+1] - init_dict[key][index] = no_jumps[1]:
dct_3[key] = [index, index + 1]
然而,这既麻烦又丑陋(而且还不起作用)。有没有更 Pythonic 的方式来做到这一点?
【问题讨论】:
-
如果列表中的项目没有相同的差异怎么办?他们应该在一个单独的组中吗?
-
如果差异既不是2也不是3,可以忽略。
-
为什么是 2 或 3?这是问题的一部分吗?因为这里有很多可能性。请更具体。
-
这是我的问题的一个受限部分。如果您想让它更通用,则构建与差异区间一样多的字典,而不仅仅是 2 或 3。这会更困难,但从长远来看也是有用的。
-
您应该首先编写一个函数,该函数在给定
[0, 2, 5]时产生列表[0, 2]、[2, 5],在给定[1]时不产生列表、在给定[3, 6, 9]时产生[3, 6, 9]等。
标签: python python-3.x dictionary ordereddictionary