【问题标题】:how to create a nested dictionary of list如何创建列表的嵌套字典
【发布时间】: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


    【解决方案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]
    

    【讨论】:

    • 救了我的命,我在考虑使用 enumerate 但无法完成这部分 freq_dic[k][el][1] += 1 再次感谢!
    • @Mark 感谢您捕捉我的坐标反转!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2021-11-20
    • 2021-04-19
    • 2018-01-16
    相关资源
    最近更新 更多