首页 > 解决方案 > 尝试从数字列表创建字典,但列表索引超出范围

问题描述

我正在尝试创建一个函数来创建一个字典,其中出现的次数是键,每个键都有一个出现多次的数字列表作为值

它搞砸的部分是:

if num_list[i] not in num_dic.values():

或者也搞砸了:

if num_list.index(i) == num_list.index(j):

下面的函数从 num_list 创建一个字典

def createDic(num_list):
    num_dic = {}
    num_occurs = 0
    for i in num_list:
        if num_list[i] not in num_dic.values():
            for j in num_list:
                if num_list.index(i) == num_list.index(j):
                    num_occurs += 1
            num_dic[num_occurs].append(num_list[i])
        num_occurs = 0
    return num_dic

标签: pythonlistdictionary

解决方案


您应该以不同的方式执行此操作,首先计算出现次数,然后将其转换为字典:

>>> a = [1,1,2,3,4,4,4]
>>> from collections import Counter, defaultdict
>>> c = Counter(a)
>>> c
Counter({4: 3, 1: 2, 2: 1, 3: 1})
>>> occurences = defaultdict(list)
>>> for a,b in c.items() :
...     occurences[b].append(a)
... 
>>> occurences
defaultdict(<type 'list'>, {1: [2, 3], 2: [1], 3: [4]})
>>> dict(occurences)
{1: [2, 3], 2: [1], 3: [4]}

推荐阅读