gpt4 book ai didi

Python:按一组键对列表进行分组

转载 作者:行者123 更新时间:2023-11-28 22:53:56 24 4
gpt4 key购买 nike

我有一个元组输入列表,其条目是:

input_1 = [('v1',['f1','f2','f3']),('v2',['f1','f2','f4']),('v3',['f1','f2','f4'])]
^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^

我想知道是否有办法获取包含如下“组”的元组列表:

output_1 = [(['f1','f2'],['v1','v2','v3']) , (['f3'],['v1']), (['f4'],['v2','v3'])]

如果信息不够,其他输入/输出可能是:

input_2 = [('v1',['f1']),('v2',['f2','f3']),('v3',['f4'])]

output_2 = [(['f1'],['v1']) , (['f2','f3'],['v2']), (['f4'],['v3'])]

input_3 = [('v1',['f1','f2']),('v2',['f1','f2']),('v3',['f3']),('v4',['f1','f2'])]
^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^

output_3 = [(['f1','f2'],['v1','v2','v4']) , (['f3'],['v3'])]

我认为可能有一种方法可以通过实现字典来实现这一点,但我是 Python 的新手,我无法从我看到的示例中弄清楚如何做到这一点:

Grouping integers by set membership in Python

Make sure all dicts in a list have the same keys

我想我可以通过一堆 for 循环低效地做到这一点,但是有没有 pythonic 或干净的替代方案?很抱歉,如果这个问题提出得不好,但感谢您的任何意见。

最佳答案

您可以遍历两个级别,然后重建输入,翻转级别;它可以帮助您完成大部分工作。主要问题是如何对共享 fv 进行分组...有不同的排列可以得到与 Tim 建议相同的结果。

Different output grouping permutations...which is more valid?

无论如何:这是一个开始。

from collections import defaultdict

input_1 = [('v1',['f1','f2','f3']),
('v2',['f1','f2','f4']),
('v3',['f1','f2','f4'])]
input_2 = [('v1',['f1']),
('v2',['f2','f3']),
('v3',['f4'])]
input_3 = [('v1',['f1','f2']),
('v2',['f1','f2']),
('v3',['f3']),
('v4',['f1','f2'])]

def group(inp):
out = defaultdict(list)
for group in inp:
key = group[0]
for entry in group[1]:
out[entry].append(key)
return dict(out)

输出看起来像:

print group(input_1)
# {'f1': ['v1', 'v2', 'v3'],
# 'f2': ['v1', 'v2', 'v3'],
# 'f3': ['v1'],
# 'f4': ['v2', 'v3']}
print group(input_2)
# {'f1': ['v1'],
# 'f2': ['v2'],
# 'f3': ['v2'],
# 'f4': ['v3']}
print group(input_3)
# {'f1': ['v1', 'v2', 'v4'],
# 'f2': ['v1', 'v2', 'v4'],
# 'f3': ['v3']}

关于Python:按一组键对列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18755734/

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