gpt4 book ai didi

python - 查找列表的多个子集或多个列表的单个超集

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

我有一个包含 1 到 n 个元素的列表。列表对象是:

[['Market F', 'Others', 'FR A', 'BR A', 'SBR A'], 
['Market J', 'Competitor A', 'FR Y', 'BR I', 'SBR AJ'],
['Market L', 'Others', 'FR Q', 'BR A', 'SBR A'],
['Market M', 'Others', 'FR G', 'BR B', 'SBR B'],
['Market N', 'My Company', 'FR W', 'BR D', 'SBR H'],
['Market TT', 'Others', 'FR Q', 'BR A', 'SBR A'],
['Market U', 'Others', 'FR Q', 'BR A', 'SBR A'],
['Market F', 'Others', 'FR A', 'BR A'],
['Market J', 'Competitor A', 'FR Y', 'BR I'],
['Market L', 'Others', 'FR Q', 'BR A'],
['Market M', 'Others', 'FR G', 'BR B'],
['Market TT', 'Others', 'FR Q', 'BR A'],
['Market U', 'Others', 'FR Q', 'BR A'],
['Market F', 'Others', 'FR A'],
['Market J', 'Competitor A', 'FR Y'],
['Market L', 'Others', 'FR Q'],
['Market M', 'Others', 'FR G'],
['Market TT', 'Others', 'FR Q'],
['Market U', 'Others', 'FR Q'],
['Market F', 'Others'],
['Market J', 'Competitor A'],
['Market J']]

例如

  • ['Market J'] 是以下内容的子集:
  • ['市场 J', '竞争对手 A'] 是以下子集:
  • ['Market J', 'Competitor A', 'FR Y'] 这又是以下的子集:
  • ['市场 J', '竞争对手 A', 'FR Y', 'BR I'] 这是以下子集:
  • ['市场 J', '竞争对手 A', 'FR Y', 'BR I', 'SBR AJ']

以相反的顺序,每个都是后者的超集。

我想做的是以字典的形式显示这种关系,例如:

{"['Market J']": [
['Market J', 'Competitor A'],
['Market J', 'Competitor A', 'FR Y'],
['Market J', 'Competitor A', 'FR Y', 'BR I']
]}

(键是我列表中的元素,不包括键本身将包含在另一个键的值中,例如 "['Market J']" 将是一个键,但 “['市场 J','竞争对手 A']” 不会。)

或更好的数据结构(如果您可以建议的话)。我会发布代码片段,但我想不出最佳方法。

最佳答案

你可以使用字典理解:

l = [...]

# Dictionary keys must be immutable
l = [tuple(x) for x in l]

# Taking only proper subsets
d = {key: [match for match in l if set(key).issubset(match) and not
set(match).issubset(key)] for key in l}

# Removing keys with no supersets
d = {k:v for k, v in d.items() if v}

# Removing keys which are supersets of other keys
d = {k:v for k, v in d.items() if k not in [item for sublist in d.values()
for item in sublist]}

print(d)
>>>{('Market TT', 'Others', 'FR Q'): [('Market TT', 'Others', 'FR Q', 'BR A', 'SBR A'), ('Market TT', 'Others', 'FR Q', 'BR A')],
('Market L', 'Others', 'FR Q'): [('Market L', 'Others', 'FR Q', 'BR A', 'SBR A'), ('Market L', 'Others', 'FR Q', 'BR A')],
('Market M', 'Others', 'FR G'): [('Market M', 'Others', 'FR G', 'BR B', 'SBR B'), ('Market M', 'Others', 'FR G', 'BR B')],
('Market U', 'Others', 'FR Q'): [('Market U', 'Others', 'FR Q', 'BR A', 'SBR A'), ('Market U', 'Others', 'FR Q', 'BR A')],
('Market F', 'Others'): [('Market F', 'Others', 'FR A', 'BR A', 'SBR A'), ('Market F', 'Others', 'FR A', 'BR A'), ('Market F', 'Others', 'FR A')],
('Market J',): [('Market J', 'Competitor A', 'FR Y', 'BR I', 'SBR AJ'), ('Market J', 'Competitor A', 'FR Y', 'BR I'), ('Market J', 'Competitor A', 'FR Y'), ('Market J', 'Competitor A')]}

关于python - 查找列表的多个子集或多个列表的单个超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51096014/

25 4 0
文章推荐: python - 从单次导入访问 python 应用程序中的全局变量
文章推荐: css - 在没有 JavaScript 的情况下单击时更改
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com