如何将字典列表值转换为整数?

时间:2016-07-28 15:13:35

标签: python string dictionary integer python-3.5

我在Python 3.5中工作。我上传了一个CSV文件并将其制作成字典。但是,每个键的多个值列表是一个字符串而不是整数。如何将每个键的值转换为整数?

此外,还有一种方法可以让将来的CSV导入自动使字典值列表成为整数吗?

到目前为止,这就是我所拥有的:

import csv
reader = csv.reader(open('filename.csv'))
dictname = {}
for row in reader:
    key = row[0]
    if key in dictname:
        pass
    dictname[key] = row[1:]

print dictname

3 个答案:

答案 0 :(得分:0)

如果row是包含字符串格式的整数的列表:

dictname[key] = [int(elt) for elt in row[1:] if elt.isdigit()]

应该做的伎俩

答案 1 :(得分:0)

您可以使用pandas并指定转换器功能。实际上,您甚至可能不需要这样做,因为它会智能地解析CSV文件。

import pandas as pd

df = pd.read_csv('filename.csv')

如果您需要转换器功能:

df = pd.read_csv('filename.csv',converters={'yourintegercolumn':int})

答案 2 :(得分:0)

我使用函数首先检查值是否为字符串/ unicode。如果是这样,那么它会尝试将其转换为浮点数,例如“1,234.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:]]