我使用一个函数首先检查值是否为string/unicode。如果是这样,它会尝试将其转换为浮点值,例如“1234.45”->;1234.45。如果此操作失败或该值不是字符串/浮点值,则函数将返回未更改的值。在
然后在列表理解中使用此函数填充字典。在
请注意,if key in dictname: pass块不执行任何操作。如果数据中存在重复键,则有三个选项:
1)用具有相同键值的新行覆盖现有键的数据(这就是当前发生的情况)。在
2)只使用第一次出现的键行。在本例中,将pass更改为continue。在
3)尝试汇总数据。这更复杂,超出了你原来的问题的范围,所以我将把它留给你去找出或张贴一个新的问题涵盖这个范围。在def convert_to_numeric(value):
if isinstance(i, (str, unicode)):
try:
result = float(value)
except:
pass # Returns result on next line.
return result
for row in reader:
key = row[0]
if key in dictname:
pass # This doesn't do anything. Use `continue` to avoid overwriting.
dictname[key] = [convert_to_numeric(i) for i in row[1:]]