在字典列表中重复有固定数量的字符串:字符串项 - Ruth, James, Sandy, Daniel, Sarah, Tommy, Alex, Rob, Teddy, Steve, Mark
。这里n = 11
。
我的字典如下所示(键后面的数字是组的排名):
DictionaryLists = {
1: {1 : ['Teddy', 'Daniel', 'Alex']},
2: {2 : ['Rob', 'Steve', 'Mark', 'Sandy']},
3: {5 : ['Ruth', 'Sarah', 'James']},
4: {1 : ['Teddy', 'Alex', 'Steve', 'Sandy', 'Daniel']},
5: {2 : ['Mark', 'Sarah', 'Rob']},
6: {1 : ['Teddy', 'Daniel', 'Alex']},
7: {2 : ['Mark', 'Sandy']}
}
任务1:我想找到的内容:
我想找出字符串项列表组合的频率(顺序无关紧要)。假设我选择Teddy, Daniel, Alex
的组合(顺序无关紧要),那么我想在rank = 1时看到该组的频率。然后我想看看rank = 2 WHEN中的字符串是什么Teddy, Daniel, Alex
在rank = 1中。例如,当{3}名在等级1中时,Rob
在等级2中。Teddy, Alex, Daniel
组在等级1中出现3次。{{1}出现两次。所以结果应该是,
Rob
这意味着Teddy,Daniel,Alex,3,Rob,2
在rank = 1中出现三次:Teddy,Daniel,Alex
在rank = 2时出现2次,当这三个名称在rank = 1时。
我的尝试:
我创建了一个包含字典中所有列表的列表。 Rob
。
TotalLists = [OneGroupRank1, OneGroupRank2, OneGroupRank3, TwoGroupRank1, TwoGroupRank2, ThreeGroupRank1, ThreeGroupRank2]
这基本上从第0个列表中取出三个字符串并找到模式。这产生了n=3
NewDict = {}
TotalListStrings = tuple(TotalLists[0][0:n]) #3 strings are taken from the list 0
NewDict = {TotalListStrings : 1}
for IndividualLists in lists[1:]:
if all(item in IndividualList for item in TotalListStrings):
NewDict[TotalListStrings]+=1
print(NewDict)
- >的结果。 9是发生的次数。
我的问题是:
(1)当有条件要检查(检查关键值,然后继续)每个组时,如何检查字典中的模式?
(2)如何创建所有名称(n = 11)的组合作为一组3并检查模式?我只想创建三个名称的组合,而不是依赖于列表。例如,泰迪,丹尼尔,亚历克斯另一个将是泰迪,罗布,史蒂夫等。
(3)如何完成上述任务1 ?
答案 0 :(得分:2)
假设(我认为)更合理的输入格式:
data = {'A': {1: ['Teddy', 'Daniel', 'Alex'],
2: ['Rob', 'Steve', 'Mark', 'Sandy'],
3: ['Ruth', 'Sarah', 'James']},
'B': {1: ['Teddy', 'Alex', 'Steve', 'Sandy', 'Daniel'],
2: ['Mark', 'Sarah', 'Rob']},
'C': {1: ['Teddy', 'Daniel', 'Alex'],
2: ['Mark', 'Sandy']}}
你可以这样做:
from collections import Counter
output = {1: 0, 2: Counter()}
names = frozenset(['Teddy', 'Daniel', 'Alex'])
for dataset in data.values():
if names.issubset(dataset[1]):
output[1] += 1
output[2].update(dataset[2])
哪个会给出输出:
>>> output
{1: 3,
2: Counter({'Mark': 3,
'Rob': 2,
'Sandy': 2,
'Sarah': 1,
'Steve': 1})}
通过将names
设为frozenset
,它也可以用作字典键,因此您可以浏览所有combinations
并获取最终输出:
{names: {1: "count at rank 1", 2: "Counter for rank 2"}}
您也可以将此扩展到更高级别(如果可用)。