我正在尝试使用 .update() 添加到 python 中的字典
I am trying to add to a dictionary in python using .update()
我创建了一个字典 ss,其中包含特定股票的总股数。然后我需要做一些计算并创建一个新字典 temp,我将把它输入到我的 .html 页面中进行演示。更新功能没有按我的预期工作,因为所有临时的都是最后一只股票,而不是我购买的所有股票的清单。当我打印 ss 时,有 [{key:value, etc}],但是当我打印 temp 时,{key:value, etc} 周围没有 []。我想我缺少一些基本的东西。
我的 .html 页面也没有读取临时字典,因为页面是空的。这是代码:
@app.route("/")
@login_required
def index():
"""Show portfolio of stocks"""
#dictionary to feed data into index
temp={}
#Select from trades all stocks held by this user
ss = db.execute("SELECT SUM(shares), symbol FROM trades WHERE id=? GROUP BY symbol", session["user_id"])
print(ss)
#lookup current price for each stock and create index of all stocks held
for row in ss:
data=lookup(row["symbol"])
totval=row["SUM(shares)"]*data["price"]
temp1={"symbol":data["symbol"], "name":data["name"], "shares":row["SUM(shares)"], "price":data["price"], "total value":totval}
temp.update(temp1)
print(temp)
return render_template("index.html", temp=temp)
任何方向都很好。谢谢
ss
中的每只股票已经有一个单独的行。请记住,key/value 对可以通过“声明”它们非常简单地添加到字典中,例如 row["totval"] = {value}
。提示,SELECT尽可能在SQL,例如符号,名称在sql.
When I print ss
, there is [{key:value, etc}]
, but when I print temp
there is no []
around the {key:value, etc}
. I think I am missing something basic.
我认为您的类型不匹配,这是一个常见的错误。我不确定你为 db.execute
使用了什么 API/package,但该方法似乎将 list
([]
) 分配给 ss
。另一方面,您的 temp
值是 dict
,({}
)。我建议两种解决方案之一。
如果 render_template
期望 temp
是 dict
而不是 list
,试试这个,因为 DinoCoderSaurus :
def index():
# other code here
for row in ss:
data = lookup(row["symbol"])
totval = row["SUM(shares)"] * data["price"]
# notice omission of data["symbol"] in temp1 assignment
temp1 = { "name": data["name"], "shares": row["SUM(shares)"], "price": data["price"], "total value":totval }
# assign temp1 to data["symbol"] key in new dict
temp[data["symbol"]] = temp1
另一方面,如果 render_template
期望 temp
像 ss
那样的 list
,请尝试:
def index():
# list to feed data into index (note change in data structure)
temp = []
# other code
for row in ss:
data = lookup(row["symbol"])
totval = row["SUM(shares)"] * data["price"]
temp1 = { "symbol": data["symbol"], "name": data["name"], "shares": row["SUM(shares)"], "price": data["price"], "total value": totval }
temp.append(temp1)
TL;DR
# Note use of the data["symbol"]
temp.update({
data["symbol"]: {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
})
有两种通用的引用相关数据的方式,列表和字典。以最简单的方式,考虑:
apple
orange
pear
使用基本的语法语法,我们可以理解一个是“枚举”它的一部分的列表;邻接是每个单独部分之间有意义的关系。列表的上下文和使用与其外部(可变)上下文有关。
另一方面,字典指定特定的内容与定义的列表相关。考虑:
fruit: apple, orange, pear
这里的fruit是对不同种类水果的枚举;定义“水果”就是给出一个与外部(可变)上下文相关的限定“水果”名称列表。或者:
fruit: An edible, usually sweet and fleshy form of such a structure.
也许是一个“真实”的定义。
因此,如果我们考虑如何引用列表而不是字典,向列表添加定义,我们通过(通常)附加新项目来创建新列表:
apple
orange
pear
+ kiwi
之前我们有三个,现在我们有四个(根据上下文)。
而我们通过指定它的定义并命名它来附加一个新定义:
fruit: An edible, usually sweet and fleshy form of such a structure.
+ vegetable: A plant cultivated for its edible parts.
如果需要,我们可以通过重新定义来更新 fruit
:
fruit: An edible, usually sweet and fleshy form of such a structure.
vegetable: A plant cultivated for its edible parts.
+ fruit: I like fruit.
这给了我们一个只有它的组成部分的字典:
vegetable: A plant cultivated for its edible parts.
fruit: I like fruit.
因为您只能定义(和更新)内部引用 (fruit
)。
在伪代码中,一个列表:
fruits = []
fruits.add('apple')
fruits.add('orange')
fruits.add('pear')
// ['apple','orange','pear']
同样,定义列表作用于“键”关系,因此您可以添加或重新定义一个键关系:
foods = {}
foods['fruit'] = 'I like fruit.'
foods['vegetables'] = 'Gotta eat your veggies.'
// {
// fruit: 'I like fruit.',
// vegetables: 'Gotta eat your veggies!',
// }
从这个意义上说,“更新”字典意味着重新定义 and/or 提供新的“键”关系(内部)。
考虑:
fruits = []
fruits.append('apple')
fruits.append('orange')
fruits.append('pear')
print(', '.join(fruits))
# apple, orange, pear
foods = {
'fruits': 'Fruits are good.'
}
# Adding a definition
foods['vegetables'] = 'Gotta eat your veggies!'
# Updating a definition
foods.update({
'fruits': 'I like fruit!',
'meats': 'Can haz meat?'
})
for food in foods.values():
print(food)
# I like fruit!
# Gotta eat your veggies!
# Can haz meat?
https://onlinegdb.com/SkneEJsw_
那么,您真正需要的是字典的 唯一 键。独特之处在于,在字典的上下文中,一个键等于一个定义。我认为它看起来像这样:
# Note use of the data["symbol"]
temp.update({
data["symbol"]: {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
})
或直接:
temp[data["symbol"]] = {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
现在您正在使用有意义定义的术语更新您的字典,这些术语解析为基于的特定定义关键项。
我创建了一个字典 ss,其中包含特定股票的总股数。然后我需要做一些计算并创建一个新字典 temp,我将把它输入到我的 .html 页面中进行演示。更新功能没有按我的预期工作,因为所有临时的都是最后一只股票,而不是我购买的所有股票的清单。当我打印 ss 时,有 [{key:value, etc}],但是当我打印 temp 时,{key:value, etc} 周围没有 []。我想我缺少一些基本的东西。
我的 .html 页面也没有读取临时字典,因为页面是空的。这是代码:
@app.route("/")
@login_required
def index():
"""Show portfolio of stocks"""
#dictionary to feed data into index
temp={}
#Select from trades all stocks held by this user
ss = db.execute("SELECT SUM(shares), symbol FROM trades WHERE id=? GROUP BY symbol", session["user_id"])
print(ss)
#lookup current price for each stock and create index of all stocks held
for row in ss:
data=lookup(row["symbol"])
totval=row["SUM(shares)"]*data["price"]
temp1={"symbol":data["symbol"], "name":data["name"], "shares":row["SUM(shares)"], "price":data["price"], "total value":totval}
temp.update(temp1)
print(temp)
return render_template("index.html", temp=temp)
任何方向都很好。谢谢
ss
中的每只股票已经有一个单独的行。请记住,key/value 对可以通过“声明”它们非常简单地添加到字典中,例如 row["totval"] = {value}
。提示,SELECT尽可能在SQL,例如符号,名称在sql.
When I print
ss
, there is[{key:value, etc}]
, but when I printtemp
there is no[]
around the{key:value, etc}
. I think I am missing something basic.
我认为您的类型不匹配,这是一个常见的错误。我不确定你为 db.execute
使用了什么 API/package,但该方法似乎将 list
([]
) 分配给 ss
。另一方面,您的 temp
值是 dict
,({}
)。我建议两种解决方案之一。
如果 render_template
期望 temp
是 dict
而不是 list
,试试这个,因为 DinoCoderSaurus
def index():
# other code here
for row in ss:
data = lookup(row["symbol"])
totval = row["SUM(shares)"] * data["price"]
# notice omission of data["symbol"] in temp1 assignment
temp1 = { "name": data["name"], "shares": row["SUM(shares)"], "price": data["price"], "total value":totval }
# assign temp1 to data["symbol"] key in new dict
temp[data["symbol"]] = temp1
另一方面,如果 render_template
期望 temp
像 ss
那样的 list
,请尝试:
def index():
# list to feed data into index (note change in data structure)
temp = []
# other code
for row in ss:
data = lookup(row["symbol"])
totval = row["SUM(shares)"] * data["price"]
temp1 = { "symbol": data["symbol"], "name": data["name"], "shares": row["SUM(shares)"], "price": data["price"], "total value": totval }
temp.append(temp1)
TL;DR
# Note use of the data["symbol"]
temp.update({
data["symbol"]: {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
})
有两种通用的引用相关数据的方式,列表和字典。以最简单的方式,考虑:
apple
orange
pear
使用基本的语法语法,我们可以理解一个是“枚举”它的一部分的列表;邻接是每个单独部分之间有意义的关系。列表的上下文和使用与其外部(可变)上下文有关。
另一方面,字典指定特定的内容与定义的列表相关。考虑:
fruit: apple, orange, pear
这里的fruit是对不同种类水果的枚举;定义“水果”就是给出一个与外部(可变)上下文相关的限定“水果”名称列表。或者:
fruit: An edible, usually sweet and fleshy form of such a structure.
也许是一个“真实”的定义。
因此,如果我们考虑如何引用列表而不是字典,向列表添加定义,我们通过(通常)附加新项目来创建新列表:
apple
orange
pear
+ kiwi
之前我们有三个,现在我们有四个(根据上下文)。
而我们通过指定它的定义并命名它来附加一个新定义:
fruit: An edible, usually sweet and fleshy form of such a structure.
+ vegetable: A plant cultivated for its edible parts.
如果需要,我们可以通过重新定义来更新 fruit
:
fruit: An edible, usually sweet and fleshy form of such a structure.
vegetable: A plant cultivated for its edible parts.
+ fruit: I like fruit.
这给了我们一个只有它的组成部分的字典:
vegetable: A plant cultivated for its edible parts.
fruit: I like fruit.
因为您只能定义(和更新)内部引用 (fruit
)。
在伪代码中,一个列表:
fruits = []
fruits.add('apple')
fruits.add('orange')
fruits.add('pear')
// ['apple','orange','pear']
同样,定义列表作用于“键”关系,因此您可以添加或重新定义一个键关系:
foods = {}
foods['fruit'] = 'I like fruit.'
foods['vegetables'] = 'Gotta eat your veggies.'
// {
// fruit: 'I like fruit.',
// vegetables: 'Gotta eat your veggies!',
// }
从这个意义上说,“更新”字典意味着重新定义 and/or 提供新的“键”关系(内部)。
考虑:
fruits = []
fruits.append('apple')
fruits.append('orange')
fruits.append('pear')
print(', '.join(fruits))
# apple, orange, pear
foods = {
'fruits': 'Fruits are good.'
}
# Adding a definition
foods['vegetables'] = 'Gotta eat your veggies!'
# Updating a definition
foods.update({
'fruits': 'I like fruit!',
'meats': 'Can haz meat?'
})
for food in foods.values():
print(food)
# I like fruit!
# Gotta eat your veggies!
# Can haz meat?
https://onlinegdb.com/SkneEJsw_
那么,您真正需要的是字典的 唯一 键。独特之处在于,在字典的上下文中,一个键等于一个定义。我认为它看起来像这样:
# Note use of the data["symbol"]
temp.update({
data["symbol"]: {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
})
或直接:
temp[data["symbol"]] = {
"symbol": data["symbol"],
"name": data["name"],
"shares": row["SUM(shares)"],
"price": data["price"],
"total value": totval
}
现在您正在使用有意义定义的术语更新您的字典,这些术语解析为基于的特定定义关键项。