使用循环将值添加到字典键

时间:2018-02-02 14:52:55

标签: python loops dictionary

我有一个来自以下类型的大型数据库:

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}

谢谢。

3 个答案:

答案 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'])
  1. 在Python中,您不需要定义对象类型 显式然后分配它的值,这意味着Database = dict()是多余的,因为你已经将它定义为a 字典下面的行。
  2. 您打算汇总if语句的结果 所以Buying_PriceSelling_Price都应该定义为列表而不是字符串。您可以通过指定[]来执行此操作 值或文字list()
  3. 根据您的数据结构,您没有 buy_averagesell_average个密钥,仅buysell,因此请确保使用正确的密钥。
  4. 使用时,您不需要重新分配列表值 append()方法,它是对象的方法,因此它会就地更新对象。
  5. 您没有设置Name对象中Database的内容 但是你正试图为它添加价值。
  6. 总的来说,代码应该大致如下:

    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": ""}

这样,您就可以同时附加数据NameBuying_PriceSelling_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"]