我有一个来自以下类型的大型数据库:
data = {
"2": {"overall": 172, "buy": 172, "name": "ben", "id": 2, "sell": 172},
"3": {"overall": 173, "buy": 173, "name": "dan", "id": 3, "sell": 173},
"4": {"overall": 174, "buy": 174, "name": "josh", "id": 4, "sell": 174},
...
等约10k行。
然后,我创建了一个循环来查找这个dict()
内是否有特定的名称:
我用了下一个循环
items = ["ben","josh"]
Database = dict()
Database = {"Buying_Price": "", "Selling_Price": ""}
for masterkey, mastervalue in data.items():
if mastervalue['name'] in items:
Database["Name"] = Database["Name"].append(mastervalue['name'])
Database["Buying_Price"] = Database["Buying_Price"].append(mastervalue['buy'])
Database["Selling_Price"] = Database["Selling_Price"].append(mastervalue['sell'])
但是,我收到了下一个错误:
Database["Buying_Price"] = Database["Buying_Price"].append(mastervalue['buy_average'])
AttributeError: 'str' object has no attribute 'append'
我的目标是获得一个带有2个密钥的dict名称数据库:Buying_Price,Selling_Price
其中每个密钥都有以下内容:
Buying_Price = {"ben":172,"josh":174}
Sellng_Price = {"ben":172,"josh":174}
谢谢。
答案 0 :(得分:1)
您发布的代码存在一些问题,因此我们会一行一行地修复它们:
items = ["ben", "josh"]
Database = dict()
Database = {"Buying_Price": "", "Selling_Price": ""}
for masterkey, mastervalue in data.items():
if mastervalue['name'] in items:
Database["Name"] = Database["Name"].append(mastervalue['name'])
Database["Buying_Price"] = Database["Buying_Price"].append(mastervalue['buy_average'])
Database["Selling_Price"] = Database["Selling_Price"].append(mastervalue['sell_average'])
Database =
dict()
是多余的,因为你已经将它定义为a
字典下面的行。if
语句的结果
所以Buying_Price
和Selling_Price
都应该定义为列表而不是字符串。您可以通过指定[]
来执行此操作
值或文字list()
。buy_average
和sell_average
个密钥,仅buy
和sell
,因此请确保使用正确的密钥。append()
方法,它是对象的方法,因此它会就地更新对象。Name
对象中Database
的内容
但是你正试图为它添加价值。总的来说,代码应该大致如下:
items = ["ben","josh"]
Database = {"Buying_Price": [], "Selling_Price": [], "Name": []}
for masterkey, mastervalue in data.items():
if mastervalue['name'] in items:
Database["Name"].append(mastervalue['name'])
Database["Buying_Price"].append(mastervalue['buy'])
Database["Selling_Price"].append(mastervalue['sell'])
答案 1 :(得分:0)
在Database = {"Buying_Price": "", "Selling_Price": ""}
中,您将密钥Buying_Price
定义为""
:表示字符串。您正在尝试将.append()
列表方法用于字符串,因此错误为'str' object has no attribute 'append'
。
我们不知道您想要的输出,但看到您想要如何计算数据,我建议您这样做:
Database = {"Name" : [], "Buying_Price": [], "Selling_Price": []}
而不是原来......
Database = {"Buying_Price": "", "Selling_Price": ""}
这样,您就可以同时附加数据Name
,Buying_Price
和Selling_Price
,并且您将能够搜索和访问数据所有数组只使用一个索引。
我没有注意,但你很难将数据附加到你的词典中。
.append()
将就地,这意味着你应该这样做:
Database["Name"].append(mastervalue['name'])
而不是
Database["Name"] = Database["Name"].append(mastervalue['name'])
答案 2 :(得分:0)
听起来你想要一个嵌套的dict
。
items = ["ben", "josh"]
new_database = {"Buying_Price": {}, "Selling_Price": {}}
for key, row in data.items():
name = row["name"]
if name in items:
new_database["Buying_Price"][name] = row["buy"]
new_database["Selling_Price"][name] = row["sell"]