我有一个defaultdict(dict)
的嵌套字典,其子字典将int
键和list
s(int
s的列表)作为值,
'A' = {2092: [1573], 2093: [1576, 1575], 2095: [1577], 2097: [1574]}
'B' = {2098: [1], 2099: [2, 3], 2101: [4], 2102: [5]}
'C' = {2001: [6], 2003: [7, 8], 2008: [9], 2009: [10]}
我想连续连接两个子键值(列表),如果它们对应的子键是连续的,这意味着它们的差小于或等于预定义的距离,例如两个连续键之间的差小于或等于2或3,...例如将距离设置为2并将合并列表放入另一个列表时,最后一个列表看起来像,
[1573, 1576, 1575, 1577, 1574]
[1, 2, 3, 4, 5]
[6, 7, 8]
[9, 10]
对于
A
,2092
,2093
,2095
,2097
是连续的,因为它们的差异为[1573, 1576, 1575, 1577, 1574]。对于C
,由于2001
和2003
的区别是[6,7,8]
,所以将它们合并到2
中;由于2003
的区别,2008
和5
没有被合并。根据Detecting consecutive integers in a list
以下代码仅在两个键之间的差异为
1
时才有效。results = []
for key, sub_dict in d.items():
sub_dict_keys = sorted(sub_dict.keys())
for k, g in groupby(enumerate(sub_dict_keys), lambda ix: ix[0] - ix[1]):
consecutive_keys = list(map(itemgetter(1), g))
val_list = []
for dict_key in consecutive_keys:
val_list.extend(sub_dict[dict_key])
results.append(val_list)
print(results)
我想知道如何使代码占任意距离。
最佳答案
如何使用:
dist = 2
results = []
for sub_dict in d.values():
sub_dict_keys = sorted(sub_dict.keys())
l = []
for k in sub_dict_keys:
if l and k > prev_key + dist:
results.append(l)
l = []
l.extend(sub_dict[k])
prev_key = k
if l:
results.append(l)
print(results)
这很干净,不需要导入模块,但是如果任何列表为空(即它们不会被附加到
result
),效果都不好。关于python - python字典连接成对差异在一定距离内的连续键的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47179055/