You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将嵌套字典中的numpy array转list?KeyError: '1'报错求解

嘿,这个问题的根源是你搞混了循环的对象,还有原始字典里的小坑,我来给你理清楚:

首先说报错原因:
你写的内层循环for day in worker里,workerworkersDays的键,也就是字符串'worker1''worker2'——所以你遍历的是字符串的每个字符(比如'w''o''r'...直到'1'),然后你试图用worker[day]去取值,这就变成了用字符索引字符串,自然会抛出KeyError: '1',因为字符串只能用整数索引,根本不认字符键。

另外还有个隐藏问题:你的原始字典里worker1下有两个完全一样的datetime.date(2017,10,20)键,Python字典不允许重复键,后面的那个数组会直接覆盖前面的,这会导致你丢失数据,得先修正这个问题。

接下来是正确的解决代码,两种方式供你选:

方式一:普通循环(可读性高)

import numpy as np
from datetime import date

# 先修正重复键的问题,这里给worker1加了一个不同的日期
workersDays = {
    'worker1': {
        date(2017, 10, 20): np.array(['1', '3', '64', '56', '34', '23']),
        date(2017, 10, 21): np.array(['12', '34', '56', '78', '98', '45'])
    },
    'worker2': {
        date(2017, 10, 21): np.array(['x', 'y', 'z'])
    }
}

# 正确遍历嵌套字典
for worker_name, day_records in workersDays.items():
    # day_records是每个工人对应的日期-数组字典
    for day, np_array in day_records.items():
        # 把numpy数组转成list并替换回去
        day_records[day] = np_array.tolist()

print(workersDays)

方式二:字典推导式(更简洁)

如果喜欢简洁的写法,可以用嵌套字典推导式一步完成转换:

workersDays = {
    worker: {day: arr.tolist() for day, arr in day_dict.items()}
    for worker, day_dict in workersDays.items()
}

这样处理后,所有嵌套在里面的numpy数组都会被转换成Python原生的list,同时也避免了循环对象错误的问题。

内容的提问来源于stack exchange,提问作者Gaspard Harera

火山引擎 最新活动