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

问题描述:

我正在使用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 
+6

示例数据在哪里? –

我使用的功能首先检查是否值是一个字符串/ 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:]] 

如果行包含以下字符串格式的整数列表:

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

应该做的伎俩

+0

我可以对所有钥匙执行吗? – mrmichael

+0

您应该可以像我从列表'row [1:]'中取出所有数字并从中创建一个int列表。所以,只要元素具有数字格式,就应该可以工作。 – HolyDanna

+0

我的意思是,我可以立即选择所有的密钥,而不必一一浏览。 – mrmichael

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

import pandas as pd 

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

如果需要转换器功能:

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

虽然这是一个选项 - 它可能是一个坚果的方式取决于什么OP正在试图做一个大锤...... –

+0

@JonClements:好点。如果你认为我应该,我会删除这个答案。 – bernie

+0

由你决定 - 毕竟这是一个有效的答案......除非它恰好发生,OP将在后处理工作上做它需要熊猫,我不确定它是完全有用的,虽然... –