Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在列表字典中查找重复出现的字符串组(顺序无关紧要)?_Python_List_Dictionary - Fatal编程技术网

Python 如何在列表字典中查找重复出现的字符串组(顺序无关紧要)?

Python 如何在列表字典中查找重复出现的字符串组(顺序无关紧要)?,python,list,dictionary,Python,List,Dictionary,字典列表中重复的字符串数量是固定的:字符串项--Ruth、James、Sandy、Daniel、Sarah、Tommy、Alex、Rob、Teddy、Steve、Mark。此处n=11 我的字典如下所示(键后的数字是组的排名): 任务1:我想找到什么: 我想找出字符串项列表的组合频率(顺序不重要)。假设我选择了Teddy,Daniel,Alex的组合(顺序不重要),那么我想看看rank=1时该组的频率。然后我想看看当Teddy,Daniel,Alex处于秩=1时,秩=2的字符串是什么。例如,Ro

字典列表中重复的字符串数量是固定的:字符串项--
Ruth、James、Sandy、Daniel、Sarah、Tommy、Alex、Rob、Teddy、Steve、Mark
。此处
n=11

我的字典如下所示(键后的数字是组的排名):

任务1:我想找到什么: 我想找出字符串项列表的组合频率(顺序不重要)。假设我选择了Teddy,Daniel,Alex的组合(顺序不重要),那么我想看看rank=1时该组的频率。然后我想看看当
Teddy,Daniel,Alex
处于秩=1时,秩=2的字符串是什么。例如,
Rob
在这三个名字排名1时排名2<代码>泰迪、亚历克斯、丹尼尔组在排名1中出现3次<代码>Rob出现两次。所以结果应该是,

Teddy,Daniel,Alex,3,Rob,2
这意味着
Teddy、Daniel、Alex
在rank=1中出现三次;而
Rob
在rank=2中出现两次,当这三个名字在rank=1中时

我的尝试: 我创建了一个包含字典中所有列表的列表<代码>总计者=[OneGroupRank1,OneGroupRank2,OneGroupRank3,TwoGroupRank1,TwoGroupRank2,TwoGroupRank1,TwoGroupRank2]

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)
这基本上从第0个列表中获取三个字符串并查找模式。这产生了
{(String1,String2,String3):9}
-->9是出现的次数

我的问题是:

(1) 当需要检查每个组的条件(检查键值,然后继续)时,如何检查字典中的模式

(2) 如何将所有名称(n=11)组合为一组3,并检查模式?我不想依赖列表,我只想创建三个名称的组合。例如,泰迪,丹尼尔,亚历克斯另一个是泰迪,罗伯,史蒂夫等

(3) 如何完成上述任务1?

假设(我认为是)一种更合理的输入格式:

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: {1: "count at rank 1", 2: "Counter for rank 2"}}

如果可能,您还可以将此问题扩展到更高级别。

此问题并不能很清楚地解释您要完成的任务;我怀疑有人。这些词典是从哪里来的?总体目标是什么?
DictionaryList
(为什么没有
7
)中键的意义是什么(如果有的话)?我可以回答问题2(),如果顺序不重要,请看。@jornsharpe,我很抱歉。我在任务1中陈述了我的总体目标。是的,我读到了,但是你能解释一下更大的图景吗?你为什么认为你需要完成任务1?@jornsharpe我正在执行关联规则挖掘。我只是想看看某个组是否在排名1中,哪些字符串最有可能跟随。例如,我将通过itertools.combines选择一个组(例如a、B、C),然后我将检查a、B、C在排名1时的总次数为10次,然后C、D在排名2时为8次。清楚吗?请让我知道,我可以进一步解释。不完全清楚(至少对我来说)。排名意味着什么?你如何知道哪个秩2s对应于哪个秩1s(如果它只是连续的键,考虑一个更好的结构,例如<代码> {DataSet:{Real:Set(成员)} < /代码>)。
Mark
3
也应该是一个输出吗?您是否需要特定的输出格式(当前的格式没有意义)?还有,你所说的“检查条件”到底是什么意思?也许你可以把这个问题简化成范围更窄的问题?回答得很好。正是我要找的。但是如何使名称=冻结集(['Teddy','Daniel','Alex']),名称组合是自动的?然后把它分配给字典?这一点你可以自己做-再看看,它会生成3个元组的名字。只是一个简单的问题。我可以用1,2,3替换A,B,C吗。当我使用1、2、3运行它时,它会显示if names.issubset(dataset[1]):@GravityM中的键错误,这不会有什么区别;我的代码中没有使用外键。
{names: {1: "count at rank 1", 2: "Counter for rank 2"}}