Python 使用Flask作为API过滤字典

Python 使用Flask作为API过滤字典,python,pandas,dictionary,Python,Pandas,Dictionary,我已将数据帧转换为字典,以便通过flask实现API。我正在努力将列名附加到字典中的每个索引,因此无法运行代码: @app.route('/api/v1/resources/names', methods=['GET']) def api_name(): if 'name' in request.args: name = str(request.args['name']) else: return "Error: No name was

我已将数据帧转换为字典,以便通过flask实现API。我正在努力将列名附加到字典中的每个索引,因此无法运行代码:

@app.route('/api/v1/resources/names', methods=['GET'])
def api_name():
    if 'name' in request.args:
        name = str(request.args['name'])
    else:
        return "Error: No name was provided, Please specify a first and last name"
    results = []

    for index['Name] in main_data:
        if (index == name):
            results.append(index)
    results = str(results)
    return jsonify(results)
当我尝试调用API时

http://127.0.0.1:5000/api/v1/resources/names?name=John%20Doe
TypeError: string indices must be integers
我想这是因为我的字典没有任何列标题,我希望将字典从

{
  "John Doe": {
    "2020-09-01": "4:00PM", 
    "2020-09-03": "8:00AM", 
    "2020-09-04": "2:00PM", 
    "2020-09-14": "8:00AM", 
    "2020-09-16": "6:00PM", 
    "2020-09-22": "5:00PM", 
    "2020-09-23": "2:00PM", 
    "2020-09-25": "1:00PM", 
    "2020-09-30": "5:00PM", 
    "2020-10-01": "8:00PM", 
    "2020-10-05": "5:00PM", 
    "2020-10-08": "1:00PM", 
    "2020-10-09": "5:00PM", 
    "2020-10-10": "4:00PM", 
    "2020-10-12": "5:00PM", 
    "2020-10-14": "7:00PM"
  }, 
  "Firstname Lastname": {
    "2020-08-20": "11:00AM", 
    "2020-08-21": "10:00AM", 
    "2020-08-22": "10:00AM", 
    "2020-08-23": "11:00AM", 
    "2020-08-24": "10:00AM", 
    "2020-08-25": "11:00AM", 
    "2020-08-26": "2:00PM", 
    "2020-08-27": "4:00PM", 
    "2020-08-28": "2:00PM", 
    "2020-08-29": "1:00PM"
  }
}
致:

我在pandas中使用的最初将数据帧转换为字典的代码如下所示

def buildDictionary():
    main_data = pd.read_csv('output.csv', delimiter=",", encoding='cp1252')
    nameDictionary = (main_data.groupby('Name')
       .apply(lambda x: dict(zip(x['Date'],x['Time'])))
       .to_dict())
    return nameDictionary
下面是一些csv数据

Name    Time    Date
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
FName LName 12:00PM     10/5/20
我希望它能回来

  "John Doe": {
    "2020-09-01": "4:00PM", 
    "2020-09-03": "8:00AM", 
    "2020-09-04": "2:00PM", 
    "2020-09-14": "8:00AM", 
    "2020-09-16": "6:00PM", 
    "2020-09-22": "5:00PM", 
    "2020-09-23": "2:00PM", 
    "2020-09-25": "1:00PM", 
    "2020-09-30": "5:00PM", 
    "2020-10-01": "8:00PM", 
    "2020-10-05": "5:00PM", 
    "2020-10-08": "1:00PM", 
    "2020-10-09": "5:00PM", 
    "2020-10-10": "4:00PM", 
    "2020-10-12": "5:00PM", 
    "2020-10-14": "7:00PM"
  } 

但为了做到这一点,我需要索引字典中的每一列。

这应该可以做到:

@app.route('/api/v1/resources/names', methods=['GET'])
def api_name():
    if 'name' in request.args:
        name = str(request.args['name'])
    else:
        return "Error: No name was provided, Please specify a first and last name"

    return jsonify({name: main_data[name]})
出现该错误的原因是for循环等效于:

for key in main_data.keys(): #looping over a dict is equivalent to looping over its keys
    index['Name'] = key
    if index == name:
        results.append(index)
。。。显然,您有一个名为
index
的全局变量,它是某个字符串

如果您修复了该问题,您将得到:

for key in main_data():
    if key == name:
        results.append(key)
。。。这与执行以下操作相同:

results = [name]

。。。然后将其转换为字符串,并将该字符串序列化为JSON,这意味着您的请求将返回
“['John Doe']”
(包括引号字符!)

请编辑您的问题,以显示您希望回复的内容
http://127.0.0.1:5000/api/v1/resources/names?name=John%20Doe
to.done@Jasmijn-ty谢谢你看我的问题
results = [name]