ValueError:字典更新序列元素#13的长度为1;需要2个

时间:2020-10-01 03:04:27

标签: python dictionary

我遇到以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-19-ec485c9b9711> in <module>
     31     except Exception as e:
     32         print(e)
---> 33         raise e
     34     print(i)
     35     i = i+1

<ipython-input-19-ec485c9b9711> in <module>
     21 #                 cc = dict(x.split(':') for x in c.split(','))
     22                 c = '"'.join(c)
---> 23                 cc = dict(x.split(':') for x in c.split(','))
     24                 df_temp = pd.DataFrame(cc.items())
     25                 df_temp = df_temp.replace('"','',regex=True)

ValueError: dictionary update sequence element #13 has length 1; 2 is required

下面是引发错误的块。我在这里签出了一些帖子,但是它们是特定于代码的。不确定是输入问题还是代码。

df_final = pd.DataFrame()
i=1
for file in files:
    try:
        s3 = session.resource('s3')
        key = file
        obj = s3.Object('my-bucket',key)
        n = obj.get()['Body'].read()
        gzipfile = BytesIO(n)
        gzipfile = gzip.GzipFile(fileobj=gzipfile)
        content = gzipfile.read()
        content = content.decode('utf-8')
        if len(content) > 0:
            content = re.findall(r"(?<=\{)(.*?)(?=\})",content)
            for c in content:
                c= c.split('"')
                for index,val in enumerate(c):
                    if index%2 == 1:
                        c[index] = val.replace(':','_').replace(',','_')
                c = '"'.join(c)
                cc = dict(x.split(':') for x in c.split(','))
                df_temp = pd.DataFrame(cc.items())
                df_temp = df_temp.replace('"','',regex=True)
                df_temp = df_temp.T
                new_header = df_temp.iloc[0] #grab the first row for the header
                df_temp = df_temp[1:] #take the data less the header row
                df_temp.columns = new_header
                df_final = pd.concat([df_final, df_temp])
    except Exception as e:
        print(e)
        raise e
    print(i)
    i = i+1

您可以分享这里的问题吗?以前可以正常工作。我要更改还是忽略该错误?

1 个答案:

答案 0 :(得分:0)

我的猜测是您的数据格式不正确。我猜想在某个时候,x.split(':')会生成一个仅包含一个元素的列表,因为:中没有x,该字符串被拆分了。这样,在根据这些数据创建字典的过程中,当期望有一对值(“键”和“值”)时,将传递一个值。

我建议您启动调试器,或者在遇到此错误时让调试器停止运行,或者找出发生的时间并达到可能发生错误的地步。然后在调试器显示中查看正在或将要处理的数据,看看是否可以找到导致问题的格式错误的数据。在运行引发异常的行之前,您可能必须对数据进行预处理才能解决此问题和其他类似问题。