Python—将类型分配给字典中的值
我有一个Python—将类型分配给字典中的值,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有一个Python应用程序,它将字典记录插入MongoDB(通过PyMongo) 字典记录是从CSV文件的行中读取的(它实际上是一个分开的选项卡,但有相同的区别) 要读取CSV文件并将每一行插入MongoDB,我使用以下代码: with open(input_file, 'r') as f_h: reader = csv.DictReader(f_h, delimiter='\t') records = [] for record in reader:
Python
应用程序,它将字典记录插入MongoDB
(通过PyMongo
)
字典记录是从CSV
文件的行中读取的(它实际上是一个分开的选项卡,但有相同的区别)
要读取CSV
文件并将每一行插入MongoDB
,我使用以下代码:
with open(input_file, 'r') as f_h:
reader = csv.DictReader(f_h, delimiter='\t')
records = []
for record in reader:
records.append(record)
if len(records) % 100 == 0:
db.add_record(table_name, records) #MongoDB helper method
records = []
这非常有效,除了我的所有值都是字符串
类型,而事实上,我在记录中也有int
和float
值。我认为Python能够确定类型,但我不确定如何在上面的代码中实现这一点。有人知道这件事吗
更新:
sihrc
和Joran
的回答都为我指明了正确的方向。然而,我想用完整的工作实现进行更新。我的问题包括在将字典发送到MongoDB之前,如何更改字典中每个元素的类型。要做到这一点,我必须将它们的代码放在字典中每个键/值
对的循环中
for key, value in dictionary.iteritems():
try:
dictionary[key] = int(value)
except: pass
try:
dictionary[key] = float(value)
except: pass
return dictionary
现在很有魅力。但愿我能接受两个答案 sihrc几乎有了解决方案
with open(input_file, 'r') as f_h:
reader = csv.DictReader(f_h, delimiter='\t')
records = []
for record in reader:
records.append(convertType(record))
if len(records) % 100 == 0:
db.add_record(table_name, records) #MongoDB helper method
records = []
def convertType(value):
try:
return float(value)
except: pass
try:
return int(value)
except:
return value
def convertType(value):
if value.strip().isdigit():
return int(value)
try:
return float(value)
except:
pass
return value
你需要按这个顺序做
因为float(“1”)
将进行精细转换并返回一个float(在另一个解决方案中),即使它实际上是一个int
你可以把它写得更短(也许更可读)
您正在尝试从输入文件中读取类型吗?你可以试着在试镜范围内试镜。我想我可能需要,但这就是我在这里要问的。+1。。。虽然您可以只
尝试:return cast(value)
而不是赋值给一个变量来返回它。。你的逻辑也有点错误
def convertType(value):
try:
return int(value) if value.strip().isdigit() else float(value)
except:
return value # or None or float("-inf") or something depending on desired behavior