gpt4 book ai didi

python字典连接成对差异在一定距离内的连续键的值

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:34 25 4
gpt4 key购买 nike

我有一个 defaultdict(dict) 的嵌套字典,其子字典具有 int 键和 list (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]

对于A2092209320952097是连续的,由于它们的差异<= 2,因此它们的值被放入一个列表[1573, 1576, 1575, 1577, 1574]。对于 C20012003 被连接到 [6,7,8],因为它们的差异是 220032008 未合并,因为它们的差异为 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)

它更加干净,无需导入模块,但如果任何列表为空,则效果不佳(即它们不会附加到结果)。

关于python字典连接成对差异在一定距离内的连续键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47179055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com