Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除作为';非类型';?_Python_Python 3.x_Dictionary_Collections - Fatal编程技术网

Python 如何删除作为';非类型';?

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', '

我正在制作一个程序,用于获取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', '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,…}