[英]how to create a nested dictionary of list
我有一本這樣的字典:
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
您只需要增加您的迭代,並且您將在循環中獲得可用的order
。
for order, m in enumerate(va,1):
el = m[0].split('_')[0]
if el in freq_dic[k]:
freq_dic[k][el][0] += 1
else:
freq_dic[k][el] = [1, order]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.