Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法修复在Python中将浮点值附加到字典中的问题?_Python_Python 3.x - Fatal编程技术网

有没有办法修复在Python中将浮点值附加到字典中的问题?

有没有办法修复在Python中将浮点值附加到字典中的问题?,python,python-3.x,Python,Python 3.x,我目前正在编写代码,读取一个包含近年来大地震日期和震级的文件,并返回一个字典,其中键是地震发生的日期,然后值是该日期发生的地震的震级 我的代码当前如下所示: def magnitudedictionary(): earth = open("earthquakes.txt", "r") magdict = {} for line in earth: alist = line.split() magnitude= float(alist[0]) date = alist[

我目前正在编写代码,读取一个包含近年来大地震日期和震级的文件,并返回一个字典,其中键是地震发生的日期,然后值是该日期发生的地震的震级

我的代码当前如下所示:

def magnitudedictionary():

earth = open("earthquakes.txt", "r")

magdict = {}
for line in earth:
    alist = line.split()
    magnitude= float(alist[0])
    date = alist[1]
    if date in magdict:
        magdict[date].append(magnitude)
    else:
        magdict[date] = magnitude

earth.close()

return magdict
但是,每当我尝试运行代码时,我总是会得到一个回溯,即:

 Traceback (most recent call last):
     File "/Users/MargaretJagger/PycharmProjects/Homework 6/Q2.py", line 18, in <module> magnitudedictionary()
     File "/Users/MargaretJagger/PycharmProjects/Homework 6/Q2.py", line 10, in magnitudedictionary
magdict[date].append(magnitude)
AttributeError: 'float' object has no attribute 'append'

Process finished with exit code 1
我不太清楚到底是什么问题,但我知道这与浮点值和字典值不匹配有关。

您可能需要一个解决方案。然后,您可以避免测试,只需输入值即可

下面是一个简单的模型:

from collections import defaultdict

earth = '''7.6 20190801
8.2 20180201
7.1 20190801
6.5 20190801
4.2 20180201'''

magdict = defaultdict(list) # values will default to new lists

for line in earth.split('\n'):
    alist = line.split(' ')
    magnitude= float(alist[0])
    date = alist[1]
    magdict[date].append(magnitude)  #magdict[date] will default to a list if the key doesn't already exist

print(magdict['20190801'])
>>> [7.6, 7.1, 6.5]
你可能需要一个新的答案。然后,您可以避免测试,只需输入值即可

下面是一个简单的模型:

from collections import defaultdict

earth = '''7.6 20190801
8.2 20180201
7.1 20190801
6.5 20190801
4.2 20180201'''

magdict = defaultdict(list) # values will default to new lists

for line in earth.split('\n'):
    alist = line.split(' ')
    magnitude= float(alist[0])
    date = alist[1]
    magdict[date].append(magnitude)  #magdict[date] will default to a list if the key doesn't already exist

print(magdict['20190801'])
>>> [7.6, 7.1, 6.5]
这些数值是当天发生的地震的震级

既然您谈论的是复数“数量”,我假设您希望能够在每个日期存储多个值。这意味着您还应该确保字典值是存储多个值的实际列表,而不仅仅是一个值

比较以下示例词典:

{
    "2019-04-17": 2.1,
    "2019-04-18": 3.5
}

{
    "2019-04-17": [1.7, 2.5],
    "2019-04-18": [3.2]
}
第一个字典只将日期映射到一个浮点数。因此,对于每个日期键,都会得到一个值。第二个字典映射到一个浮动列表。这样的列表只能包含一个值,也可以包含多个值,但也可以不包含任何值

当您查看在字典中设置值的代码时,您可以看到您实际上是在考虑多个值的情况下构建的:

if date in magdict:
    magdict[date].append(magnitude)
else:
    magdict[date] = magnitude
当字典中已经有日期时,您需要追加它。否则,直接设置日期/值对以添加密钥。这只是因为你这样做,你是设置一个单一的浮点值,即上面的第一个字典类型,而不是一个浮点列表

因此,您需要做的是在此处创建一个浮动列表:

if date in magdict:
    magdict[date].append(magnitude)
else:
    magdict[date] = [magnitude]
[magnitude]创建一个以magnitude作为第一个值的单元素列表。由于字典中的值现在是一个列表,因此调用append将成功并正确地向列表中添加另一个值

这些数值是当天发生的地震的震级

既然您谈论的是复数“数量”,我假设您希望能够在每个日期存储多个值。这意味着您还应该确保字典值是存储多个值的实际列表,而不仅仅是一个值

比较以下示例词典:

{
    "2019-04-17": 2.1,
    "2019-04-18": 3.5
}

{
    "2019-04-17": [1.7, 2.5],
    "2019-04-18": [3.2]
}
第一个字典只将日期映射到一个浮点数。因此,对于每个日期键,都会得到一个值。第二个字典映射到一个浮动列表。这样的列表只能包含一个值,也可以包含多个值,但也可以不包含任何值

当您查看在字典中设置值的代码时,您可以看到您实际上是在考虑多个值的情况下构建的:

if date in magdict:
    magdict[date].append(magnitude)
else:
    magdict[date] = magnitude
当字典中已经有日期时,您需要追加它。否则,直接设置日期/值对以添加密钥。这只是因为你这样做,你是设置一个单一的浮点值,即上面的第一个字典类型,而不是一个浮点列表

因此,您需要做的是在此处创建一个浮动列表:

if date in magdict:
    magdict[date].append(magnitude)
else:
    magdict[date] = [magnitude]

[magnitude]创建一个以magnitude作为第一个值的单元素列表。由于词典中的值现在是一个列表,因此调用append将成功并正确地向列表中添加另一个值。

错误在else子句中


它应该是magdict[date]=[magnitude],而不是magdict[date]=magnitude。

错误在else子句中


它应该是magdict[date]=[magnitude],而不是magdict[date]=magnitude。

python字典有一个非常好的方法,setdefault,在这里应该会有所帮助:

def magnitudedictionary():

    earth = open("earthquakes.txt", "r")

    magdict = {}
    for line in earth:
        alist = line.split()
        magnitude= float(alist[0])
        date = alist[1]

        magdict.setdefault(date, []).append(magnitude)

    earth.close()

    return magdict

这里有一小部分关于该方法的文档:

python字典有一个非常好的方法setdefault,它应该在这里有所帮助:

def magnitudedictionary():

    earth = open("earthquakes.txt", "r")

    magdict = {}
    for line in earth:
        alist = line.split()
        magnitude= float(alist[0])
        date = alist[1]

        magdict.setdefault(date, []).append(magnitude)

    earth.close()

    return magdict
以下是有关该方法的一小部分文档: