python - 尝试从数字列表创建字典,但列表索引超出范围
问题描述
我正在尝试创建一个函数来创建一个字典,其中出现的次数是键,每个键都有一个出现多次的数字列表作为值
它搞砸的部分是:
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
解决方案
您应该以不同的方式执行此操作,首先计算出现次数,然后将其转换为字典:
>>> 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]}
推荐阅读
- javascript - 酶测试不改变输入值和提交表格
- angular - 类型“object”必须有一个返回迭代器的“Symbol.iterator”方法
- php - 订单完成后 WooCommerce 触发 URL
- javascript - 在自动完成列表中使用向上和向下键滚动
- xml - XSLT:在 for-each 中使用 if 有异常
- python - 在 Windows10 32bit Python3 中安装 PyQt5
- excel - Power BI:折线图上的最小值/最大值,值选项卡上没有第二个实例
- node.js - Sinon Fake Timer 在测试中多次调用仅触发一次
- xml - xslt 替换一个节点
- javascript - 开玩笑的异步测试忽略了expect()函数