分解复杂的数据结构,包含字典和元组列表,以提取共同的元素

2024-06-26 14:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现自己在一个由元组列表字典组成的复杂数据结构中处于尴尬的境地。问题是字典中的多个键有公共元组元素,我想把公共元素过滤成非冗余元组元素的类别。我希望这些数据的样本能提供问题的要点

test = {'S37_1': [('L26_1', '100.000'), ('S13_1', '100.000'), ('L29_1', '100.000'), ('S37_1', '100.000'), ('S38_1', '99.910'), ('L25_1', '99.910'), ('L16_1', '99.888')],\
        'L29_1': [('L26_1', '100.000'), ('S13_1', '100.000'), ('L29_1', '100.000'), ('S37_1', '100.000'), ('S38_1', '99.910'), ('L25_1', '99.910'), ('L16_1', '99.888')], \
        'L25_2': [('S38_3', '100.000'), ('L16_4', '100.000'), ('L25_2', '100.000'), ('L29_3', '99.889'), ('L26_2', '99.783'), ('S13_2', '99.777'), ('S37_2', '99.464')], \
        'S38_3': [('S38_3', '100.000'), ('L16_4', '100.000'), ('L25_2', '100.000'), ('L29_3', '99.889'), ('L26_2', '99.783'), ('S13_2', '99.777'), ('S37_2', '99.464')]}

预期结果如下:

test = {'S37_1': [('L26_1', '100.000'), ('S13_1', '100.000'), ('L29_1', '100.000'), ('S37_1', '100.000'), ('S38_1', '99.910'), ('L25_1', '99.910'), ('L16_1', '99.888')],\
        'L25_2': [('S38_3', '100.000'), ('L16_4', '100.000'), ('L25_2', '100.000'), ('L29_3', '99.889'), ('L26_2', '99.783'), ('S13_2', '99.777'), ('S37_2', '99.464')]}

下面的代码生成了一组非冗余的元组列表,没有将它们划分为类别,因此我希望您能帮助我修改它,以便过滤“test”字典并删除所有不提供新信息的键

seen = set()
keep = []

for elem, tp_elms in test.items():
       for hit, stat in tp_elms:
              if hit in seen:
                     print(hit,stat)
              else:
                     seen.add(hit)
                     keep.append((hit,stat))

非常感谢


Tags: intest元素字典stat元组seenhit
1条回答
网友
1楼 · 发布于 2024-06-26 14:07:59

您只需要稍微修改代码,我们在其中循环所有元素,而不添加已经看到所有元素的条目

seen = set()
keep = {}

for elem, tp_elms in test.items():
    if all(tup in seen for tup in tp_elms):
        continue
    keep[elem] = tp_elms
    seen.update(tp_elms)

相关问题 更多 >