如何将嵌套字典中的numpy array转list?KeyError: '1'报错求解
嘿,这个问题的根源是你搞混了循环的对象,还有原始字典里的小坑,我来给你理清楚:
首先说报错原因:
你写的内层循环
for day in worker
里,
worker
是
workersDays
的键,也就是字符串
'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)