python - 用在字典列表中找到的名称替换字典中的键 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' 是在数据库中找到的名称。
解决方案
我不确定一切是否正确,但可能是
# --- 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_num
dict{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
始终以不同的顺序使用它。
推荐阅读
- python - 情节:TypeError:“复杂”类型的对象不是 JSON 可序列化的
- php - 树枝导航宏
- amazon-ec2 - 无法为 apache nifi 建立站点到站点通信
- java - 如何在 MySQL 数据库中重新分配唯一的整数 ID?
- javascript - 使用 `ng-repeat` 为元素赋予不同的颜色
- android - 无法解决:om.google.android.gms:play-services-location:15.0.1
- mysql - 带有字符串值的mysql数据透视表
- makefile - Make:访问参数标志
- excel - 如何在 Excel 中检查单元格中的字符串列表?
- python - 如何使用 Selenium 和 Python 访问 Angular 的矩选择器的值?