【发布时间】:2018-02-01 05:03:12
【问题描述】:
我是一个对 python 完全陌生的学生,目前正在学习它。 所以我被要求从一个包含文件中一行数据的列表中创建一个字典。
record = ["Name", "ID", "datetime", "Type", "Lat", "Long", "Central Pressure", "Mean radius gf wind", "Max wind speed", "Comment"]
该文件已经导入,它包含许多与record 列表中的元素相对应的数据行。
数据示例:
r1 = ["unnamed", "AU190607_01U", "1907-01-17 23:00", "T", "-13", "146.5", "994", "100", "10.3"]
r2 = ["unnamed", "AU190607_01U", "1907-01-17 23:00", "T", "-13", "146.5", "994", "", "10.3"]
所以我的代码是这样的
def parse_record(record):
key = ["id", "name", "year", "month", "day", "hour", "central pressure",
"radius", "speed", "lat", "long"]
value = [str(record[1]), str(record[0]), int((record[2][:4]),
int((record[2])[5:7]),int((record[2])[8:10]),
int((record[2][10:13]),float(record[6]),
float(record[7]),float(record[8]),float(record[4]), float(record[5])]
record_dictionary = dict(zip(key,value))
return record_dictionary
我期待得到
a1 = {"id": "AU190607_01U", "name": "unnamed", "year": 1907, "month": 1,
"day": 17, "hour": 23,"central pressure": 994.0, "radius": 100.0,
"speed": 10.3, "lat": -13.0, "long": 146.5}
但我收到一条错误消息:
int((record[2])[8:10]),int((record[2])[10:13]), float(record[6]), float(record[7]),
ValueError: could not convert string to float:
如果数据中有一个空白值(例如上面的r2),它应该被排除在字典之外,我应该怎么做才能做到这一点?
感谢您在这方面的任何帮助!
【问题讨论】:
-
你有一个
return声明,但我没有看到你声明一个函数。 -
float(record[...])可以用 0 到 9 之间的任何整数替换...会引发此异常,因为您试图从与浮点数无关的字符串中生成浮点数。float(record[6])实际上是float("Central Pressure"),因此出现错误。 -
@zezollo,记录指的是 r1 而不是键
-
先
zip键/值可能更容易。然后您可以迭代这些值并在之后解决类型转换和验证问题。代码可能会更简单,更容易理解。 -
@Clock Slave 嗨我已经编辑了我的代码,忘了把定义放在前面..
标签: python list dictionary valueerror