我有一个包含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']
是以下内容的子集:['Market J', 'Competitor A']
是以下子集:['Market J', 'Competitor A', 'FR Y']
还是以下子集:['Market J', 'Competitor A', 'FR Y', 'BR I']
,这是以下内容的子集:['Market J', 'Competitor 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']"
是键,而"['Market J', 'Competitor A']"
则不是。)
或更好的数据结构(如果可以建议的话)。我会发布一个代码片段,但我想不出一种最佳的方法。
答案 0 :(得分:4)
您可以使用字典理解:
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')]}