如何迭代列表并将多个值附加到字典中?

时间:2019-09-08 19:31:35

标签: python-3.x dictionary key-value

我有一个项目文件,每行的ID,类别,名称和价格用逗号分隔。我正在尝试重新排列每一行,以使ID,名称和价格计数作为一个值,并将其附加到由类别确定的四个键之一。类别为c1,c2,c3和c4。

以下代码似乎有效,但是最终覆盖了该值。当打印出字典时,只有一个值附加到一个键上。我正在尝试使一个键可能具有多个值。问题区域在if,elif块中。

我希望看到类似{'c1':('ab c')('xy z'),'c2':('ab c')('xy z')....

相反,我只看到{'c1':'xy z','c2':'xy z'}或基本上是文件中四个类别中任何一个出现的最后一个值(这就是为什么我假设我覆盖而不是附加值)。

我相信我需要使用.append,但是我尝试过的操作只会导致语法错误。

1 个答案:

答案 0 :(得分:1)

您想要的是为词典中的每个类别包含一个列表List-python docs

您要声明一个新的空列表,而不是将字典中的每个元素初始化为None:

一旦安装到位,您就可以使用emptyDict['cx'].append(definition)

将每个项目附加到此

类似这样的东西:

    emptyDict = {'c1': [], 'c2': [], 'c3': [], 'c4': []}

    for i in file:
        fields = i.split(',')
        idNum = fields[0]
        category = fields[1]  # categories are c1, c2, c3, and c4 only
        name = fields[2]
        price = fields[3]
        defintion = idNum + name + price

        if category == 'c1':
            emptyDict['c1'].append(defintion)
        elif category == 'c2':
            emptyDict['c2'].append(defintion)
        elif category == 'c3':
            emptyDict['c3'].append(defintion)
        else:
            emptyDict['c4'].append(definition)