有没有办法修复在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
以下是有关该方法的一小部分文档: