Python 如何删除作为';非类型';?
我正在制作一个程序,用于获取salesforce报告,遍历它们,并在flask应用程序中显示它们Python 如何删除作为';非类型';?,python,python-3.x,dictionary,collections,Python,Python 3.x,Dictionary,Collections,我正在制作一个程序,用于获取salesforce报告,遍历它们,并在flask应用程序中显示它们 from flask import Flask from flask import render_template import csv import collections app = Flask(__name__) # odict_keys(['Edit', 'Activity ID', 'Assigned', 'Subject', 'Last Modified Date', 'Date', '
from flask import Flask
from flask import render_template
import csv
import collections
app = Flask(__name__)
# odict_keys(['Edit', 'Activity ID', 'Assigned', 'Subject', 'Last Modified Date', 'Date', 'Priority'
# , 'Status', 'Company / Account', 'Created By', 'Activity Type', 'Comments'])
@app.route('/')
def hello_world():
reports = {}
with open('./reports/report040717.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter=',', quotechar='"')
for row in reader:
temp = {row['Activity ID']: {'subject': row['Subject'], 'due_date': row['Date'], 'last_modified': row['Last Modified Date'], 'status': row['Status'],
'company': row['Company / Account'], 'type': row['Activity Type'], 'comments': row['Comments']}}
reports.update(temp)
reports = collections.OrderedDict(reversed(list(reports.items())))
for k, v in reports.items():
print(k, v)
return render_template('home.html', reports=reports)
if __name__ == '__main__':
app.run()
我将读取的所有行存储到一个字典中,然后将该字典推送到另一个以ID为键的字典中
问题是我一直得到一本空字典,我不知道如何删除它。这是当我在调用渲染之前打印k,v值时它的显示方式
None {'subject': None, 'due_date': None, 'last_modified': None, 'status': None, 'company': None, 'type': None, 'comments': None}
其他人就是这样出现的
00TF000003Ti9iE {'subject': 'some text', 'due_date': '4/18/2017', 'last_modified': '8/23/2016', 'status': 'Not Started', 'company': 'some text', 'type': 'some text', 'comments': 'some text'}
关于如何删除报告dict中的None条目,您有什么建议吗?我想您可以从CSV文件中读取空行。您可以执行以下操作,以便根本不会将这些空行加载到字典中:
if row['Activity ID'] and row['Subject']:
# row will only be added if the values above aren't None
temp = {row['Activity ID']: {'subject': row['Subject'], 'due_date': row['Date'], 'last_modified': row['Last Modified Date'], 'status': row['Status'],
'company': row['Company / Account'], 'type': row['Activity Type'], 'comments': row['Comments']}}
reports.update(temp)
我会想象你从CSV文件中读取空行。您可以执行以下操作,以便根本不会将这些空行加载到字典中:
if row['Activity ID'] and row['Subject']:
# row will only be added if the values above aren't None
temp = {row['Activity ID']: {'subject': row['Subject'], 'due_date': row['Date'], 'last_modified': row['Last Modified Date'], 'status': row['Status'],
'company': row['Company / Account'], 'type': row['Activity Type'], 'comments': row['Comments']}}
reports.update(temp)
您不应该在较大的字典中放入任何只包含None作为值的内容。我的原始代码不正确这是临时Wolf建议的修复
if(None not in temp):
reports.update(temp)
您不应该在较大的字典中放入任何只包含None作为值的内容。我的原始代码不正确这是临时Wolf建议的修复
if(None not in temp):
reports.update(temp)
成功了。太谢谢你了,我都快发疯了。Np!接受我的回答将不胜感激:)2分钟,我会的!成功了。太谢谢你了,我都快发疯了。Np!接受我的回答将不胜感激:)2分钟,我会的!报告应该是列表而不是字典吗?调用reports.update时,您不是在向报表字典添加新信息,而是在用新信息替换旧信息。报表应该是列表而不是字典吗?当您调用reports.update时,您并不是在报告字典中添加新信息,而是用新信息替换旧信息。如果temp不是None,Python允许
:
不需要括号。。。这是行不通的,因为temp是一本包含None
答案的字典,而不是None
本身<代码>如果temp:会检查它的真实性,但是因为它填充了None
s,所以它的长度不是零,因此它仍然会计算为真。你是对的,我误解了问题的一部分。固定到工作代码您仍然使用比您需要的更多的括号:):如果临时值()中没有,则:
但是我想您会发现仍然不工作的临时值()
是一个单一的值:{'subject':无,'due_date':无,'last_modified':无,'status':无,'company':无,'type':无,'comments':无}
。我建议改为if None不在temp:
as在dict
中默认列出它们的键,这将测试行['Activity ID']
是否为None
。虽然我意识到它们不是必需的,但我总是为if语句加上括号。temp.values()是一个无值数组。我提前测试了它是否有效。请再次查看temp
。它是一个包含单个键值对的dict。值是另一个dict,包含字符串到值的条目,格式为{k:{sk:sv,sk2:sv2,…}}
Python允许如果temp不是None:
不需要括号。。。这是行不通的,因为temp是一本包含None
答案的字典,而不是None
本身<代码>如果temp:会检查它的真实性,但是因为它填充了None
s,所以它的长度不是零,因此它仍然会计算为真。你是对的,我误解了问题的一部分。固定到工作代码您仍然使用比您需要的更多的括号:):如果临时值()中没有,则:
但是我想您会发现仍然不工作的临时值()
是一个单一的值:{'subject':无,'due_date':无,'last_modified':无,'status':无,'company':无,'type':无,'comments':无}
。我建议改为if None不在temp:
as在dict
中默认列出它们的键,这将测试行['Activity ID']
是否为None
。虽然我意识到它们不是必需的,但我总是为if语句加上括号。temp.values()是一个无值数组。我提前测试了它是否有效。请再次查看temp
。它是一个包含单个键值对的dict。该值是另一个dict,包含字符串到值的条目,格式为{k:{sk:sv,sk2:sv2,…}