gpt4 book ai didi

python - 值错误 : dictionary update sequence element #0 has length 1; 2 is required Python Dictionary

转载 作者:行者123 更新时间:2023-12-05 02:03:07 30 4
gpt4 key购买 nike

我目前遇到了这个错误,我找不到问题所在。一开始我以为是因为transformed_data[2]里面只有1个,但是好像不是这样。

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

我的代码:

print(transformed_data)
country =transformed_data[0]
continent = transformed_data[1]
transformed_data[2] = transformed_data[2].replace("''",'test')
print(dict(transformed_data[2])) # when I add dict it does the error.
print((transformed_data[2])) # without dict, no error.

没有 dict 的 shell:

['Qatar', 'ASIA', '{2001: 41.215}', '{2001: 615000}']
{2001: 41.215}
['Cameroon', 'AFRICA', '{2001: 3.324}', '{2001: 16358000}']
{2001: 3.324}
['Democratic Republic of Congo', 'AFRICA', '{2006: 1.553}', '{2006: 56578000}']
{2006: 1.553}
['Bulgaria', 'EUROPE', '{2001: 48.923}', '{2001: 7931000}']
{2001: 48.923}
['Poland', 'EUROPE', '{2001: 306.696}', '{2001: 38489000}']
{2001: 306.696}
['Lesotho', 'AFRICA', "{1975: ''}", "{1975: '1161000'}"]
{1975: test}
['Albania', 'EUROPE', '{2002: 3.748}', '{2002: 3126000}']
{2002: 3.748}
['Colombia', 'SOUTH AMERICA', '{2001: 56.259}', '{2001: 39630000}']
{2001: 56.259}
['Pakistan', 'ASIA', '{2012: 166.33}', '{2012: 187280000}']
{2012: 166.33}

带字典的外壳:

Exception raised:
Traceback (most recent call last):
File "/Applications/Thonny.app/Contents/Frameworks/Python.framework/Versions/3.7/lib/python3.7/doctest.py", line 1330, in __run
compileflags, 1), test.globs)
File "<doctest __main__.get_bar_co2_pc_by_continent[1]>", line 1, in <module>
get_bar_co2_pc_by_continent(d1, 2001)
File "/Users/bob/Desktop/python class/assignment/final/plot_data.py", line 33, in get_bar_co2_pc_by_continent
print(dict(transformed_data[2]))
ValueError: dictionary update sequence element #0 has length 1; 2 is required

最佳答案

错误的原因是 dict() 的语法不需要字符串。您可以按以下方式使用 dict():

dict([[2001, 41.215], [2002, 3.748]])

其中外层列表对应字典本身,每个内层列表对应一个键值对。不过,这可能不适用于您的输入数据,因此我也会提供一些其他提示。

编辑:如果您根本无法像您说的那样使用模块,并且可以对数据输入做出假设,那么您当然可以只拆分 ': ' 并将左侧转换为一个整数和一个 float 的右边。确保使用拼接 `s[1:-1] 移除外部花括号。

l = '{2001: 53.01}'[1:-1].split(': ')
d = dict([[int(l[0]), float(l[1])]])

有关使用标准库模块的更强大的解决方案,请继续阅读。/编辑

dict() 无法将字符串转换为字典。请改用 json 模块进行该转换。

json 模块的文档:https://docs.python.org/3/library/json.html

不幸的是,因为您使用整数作为字典的键,您仍然会出错。 json 模块仅支持有效的 json,这意味着它仅支持具有 string 键。
这是有效的 json:'{"2001": 41.215}'
这不是有效的 json:'{2001: 41.215}'

如果您可以控制输入文本,那么最好将这些字典的键修改为字符串,方法是在每一侧添加双引号,手动添加,或者如果它们是生成的,然后修改脚本这样做。

否则,您可以使用某种正则表达式替换来在读取数据之前自动修复数据:

import re
# Assumes that ALL of your keys have no decimal places,
# and that none of your values look like '2001:'
new_text = re.sub(r'([1-9][0-9]*):', r'"\1":', text)

请记住,无论您选择哪种方法,当 json 模块创建您的字典时,它们都会有 string 键。如果您绝对必须使用 integer 键,您仍然可以使用某种遍历字典项的循环来转换键:

keys = d.keys()
for k in keys:
d[int(k)] = d[k]
del d[k]

这是一个示例,假设您针对所有情况事先将键转换为 string(将 dict() 替换为 json.loads()):

import json

print(transformed_data)
country =transformed_data[0]
continent = transformed_data[1]
transformed_data[2] = transformed_data[2].replace("''",'test')
print(json.loads(transformed_data[2])) # Use json module instead.

关于python - 值错误 : dictionary update sequence element #0 has length 1; 2 is required Python Dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65415958/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com