【发布时间】:2021-05-20 17:06:57
【问题描述】:
我有一本这样的字典:
mydic = {
0: [('comp.sys.mac.hardware_51563', 0.31), ('rec.motorcycles_103140', 0.29), ('alt.atheism_54143', 0.27), ('misc.forsale_76672', 0.26), ('rec.motorcycles_104809', 0.26)],
1: [('alt.atheism_54143', 0.31), ('comp.sys.mac.hardware_51563', 0.30), ('rec.motorcycles_104885', 0.30), ('talk.religion.misc_84064', 0.28), ('rec.sport.baseball_104619', 0.27)],
2: [('alt.atheism_54143', 0.29), ('talk.religion.misc_84064', 0.29), ('rec.sport.hockey_53859', 0.26), ('sci.electronics_54162', 0.25), ('comp.sys.mac.hardware_52124', 0.25)]
}
我想要做的是剪切字符串最后一部分的数字,然后计算每个键的频率。但是我也需要保持它们的顺序才能得到这样的结果:
{
0: {'comp.sys.mac.hardware': [1, 1], 'rec.motorcycles': [2,2], 'alt.atheism': [1,3], 'misc.forsale': [1, 4]},
1: {'alt.atheism': [1,1], 'comp.sys.mac.hardware': [1,2], 'rec.motorcycles': [1,3], 'talk.religion.misc': [1,4], 'rec.sport.baseball': [1,5]},
2: {'alt.atheism': [1,1], 'talk.religion.misc': [1,2], 'rec.sport.hockey': [1,3], 'sci.electronics': [1,4], 'comp.sys.mac.hardware': [1,5]}
}
这里'comp.sys.mac.hardware': [1, 1] 表示comp.sys.mac.hardware 的频率为1,并且是初始列表中的第一件事。或者'alt.atheism': [1,3] 表示已经重复了1 时间并且是原始列表中的第三项。
我一直在研究这个问题,到目前为止,我已经使用下面的代码得出了一个结果。我的问题是我不能在字典中包含order,:
{
0: {'comp.sys.mac.hardware': 1, 'rec.motorcycles': 2, 'alt.atheism': 1, 'misc.forsale': 1},
1: {'alt.atheism': 1, 'comp.sys.mac.hardware': 1, 'rec.motorcycles': 1, 'talk.religion.misc': 1, 'rec.sport.baseball': 1},
2: {'alt.atheism': 1, 'talk.religion.misc': 1, 'rec.sport.hockey': 1, 'sci.electronics': 1, 'comp.sys.mac.hardware': 1}
}
freq_dic = collections.defaultdict(dict)
for k, va in mydic.items():
lst = []
for m in va:
el = m[0].split('_')[0]
if el in freq_dic[k]:
freq_dic[k][el] = freq_dic[k][el] + 1
else:
freq_dic[k][el] = 1
【问题讨论】:
标签: python dictionary multidimensional-array