如何在具有相同键的多个项的字典中添加新行?

时间:2019-06-02 16:22:04

标签: python dictionary key size

我正在使用一个csv列表,它具有大约7000个项目,并且具有某些键,但是我想创建一个可以向其添加新行的函数,该函数是通过将价格除以权重和然后根据该数字对项目进行排序。

我已经有了数字(价格/重量),我通过一个for循环来做到这一点:

def ideal(dictionary):
    list2=list(dictionary)
    for x in range (len(list2)):
        Keys=list(dictionary[list2[x]])
        dict2=dictionary[list2[x]]
        column=list(map(dict2.get,Keys))
        newkey=(float(column[1]))/(float(column[2]))

我尝试进行for循环,以插入新行。字典格式如下:

'chips': {'category': 'food', 'price': '345.0', 'weight[kg]': '0.2',
'volume[m3]': '0.5545'}, 'broccoli': {'category': 'food', 'price': '449.0',
'weight[kg]': '2.72', 'volume[m3]': '0.5492'}, 'ham': {'category': 'food',
'price': '680.0', 'weight[kg]': '22.57', 'volume[m3]': '0.1359'}
}

还有更多类别,例如:杂货店

def ideal(dictionary):
    ####newkey is a float
    copy=dictionary
    for x in copy:
        dictionary.update( {"newkey":newkey})

但是我得到这个错误。

  

RuntimeError:字典在迭代过程中更改了大小

3 个答案:

答案 0 :(得分:1)

copy=dictionary不会复制,但会copy指向dictionary的引用,因此会出现错误RuntimeError: dictionary changed size during iteration,因为您在迭代时正在修改字典

您要制作副本,copy=dictionary.copy() 然后,您可以遍历字典并更新嵌套的字典

def ideal(dictionary, newkey_list):
    #Make copy of dictionary
    copy=dictionary.copy()

    #Iterate through the dictionary
    for idx, value in enumerate(copy.values()):
        #Update nested dictionary with appropriate newkey
        value.update( {"newkey":newkey_list[idx]})

答案 1 :(得分:0)

如果您的dict包含嵌套的dict,则需要修改该下标,而不是外部下标:

for key in copy:
    copy[key].update({'newkey': newkey})

如其他答案所指出,要创建副本,请使用:

copy = dictionary.copy()

尽管最好使用copy.deepcopy(),因为您有嵌套的字典。

答案 2 :(得分:0)

您可以用dict理解替换ideal()

ideal_dict = {k: {**v, "new_key": v["old_key"] ** 2} for k, v in old_dict.items()}

或者如果您想更新旧字典:

old_dict.update({k: {**v, "new_key": v["old_key"] ** 2} for k, v in old_dict.items()})

P.S。它应该更快。