首页 > 解决方案 > 用在字典列表中找到的名称替换字典中的键 PYTHON-FLASK

问题描述

我需要使用这本字典 {'1': 9, '2': 5} (或类似的字典),并将所有键替换为数据库中各自的名称。

我能够从数据库中获取适当的名称并将它们作为字典条目放入列表中。但是现在我有点麻烦 - 第一个字典需要用我从数据库创建的名称列表中的键替换它们的键(这一直给我错误)。我个人能想到的唯一其他解决方案是找到一种方法来获取数据库名称并将它们直接放入字典而不是空白列表,但我无法弄清楚如何使用循环来做到这一点。

empty_list = [] **# stores it as [{"name": name1}, {"name":, name2},...]**
    for x in range(0, len(dict_key_array)):
        data = {
            "itm_num": dict_key_array[x]
        }
        mysql = connectToMySQL("app_database")
        query = "SELECT name, price FROM items WHERE items.id = %(itm_num)s;"
        pre_empty_list = mysql.query_db(query, data)
        empty_list.append(pre_empty_list)

到目前为止,我已经尝试过这个,以便让名称在原始字典中占据各自的位置:

for k in order_data.keys(): **# go through each key of dictionary**
        for x in range(0, len(order_data)): **# create a counter(? I think this would lead to duplicates, but I don't know how to avoid this)**
            neym = empty_list[x]['name'] **# template debugger says: "TypeError: list indices must be integers or slices, not str"**
            order_data[neym] = order_data[k]
            del order_data[k]

我需要获取 {'1': 9, '2': 5} 的原始字典(或类似的字典,因为这是基于订单页面并且不同的订单将具有不同的键和值)以显示为 {' pasta': 9, 'soda': 5} 其中 'pasta' 和 'soda' 是在数据库中找到的名称。

标签: pythonmysqltemplatesflaskjinja2

解决方案


我不确定一切是否正确,但可能是

# --- get names ---

mysql = connectToMySQL("app_database")
query = "SELECT name, price FROM items WHERE items.id = %(itm_num)s;"

empty_list = [] # **stores it as [{"name": name1}, {"name":, name2},...]**

for item in dict_key_array:
    result = mysql.query_db(query, {"itm_num": item})
    empty_list.append(result)

# --- convert keys in order ---    

order_data = {'1': 9, '2': 5} 

for key in order_data:
    index = int(key)-1 # convert str to int # key has value 1,2,3,... but list use 0,1,2,...
    name = empty_list[index]['name']
    order_data[name] = order_data.pop(key)
    #del order_data[key] # .pop() will remove it

但也许你应该name保持itm_numdict{itm_num1: {'name": name1}, itm_num2: {"name": name2} }甚至{itm_num1: name1, itm_num2: name2}

# --- get names ---

mysql = connectToMySQL("app_database")
query = "SELECT name, price FROM items WHERE items.id = %(itm_num)s;"

empty_dict = dict() # **stores it as {itm_num1: {'name": name1}, itm_num2: {"name": name2} }**

for item_num in dict_key_array:
    empty_dict[item_num] = mysql.query_db(query, {"itm_num": item_num})

# --- convert keys in order ---    

order_data = {'1': 9, '2': 5} 

for key in order_data:
    name = empty_dict[key]['name']
    order_data[name] = order_data.pop(key)
    #del order_data[key] # .pop() will remove it

也许你甚至可以在一个查询中得到它"SELECT id, name, price FROM items"

result = mysql.query_db("SELECT id, name, price FROM items")
for row in result:
    empty_dict[row['id']] = row

但它将获取数据库的所有行。但是您可以一次从数据库中获取它,并empty_dict始终以不同的顺序使用它。


推荐阅读