【问题标题】:How do I iterate a list and append multiple values into a dictionary?如何迭代列表并将多个值附加到字典中?
【发布时间】:2019-09-08 19:31:35
【问题描述】:

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

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

我希望看到类似 {'c1': ('a b c') ('x y z'), 'c2': ('a b c') ('x y z')....

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

我认为我需要使用 .append,但我已经尝试过的只是导致语法错误。

【问题讨论】:

  • 发布一个可测试的文件内容

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


【解决方案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)

【讨论】:

  • 非常感谢!做到了。我没有想过为每个类别创建一个新列表来保存多个项目,但这更有意义。也感谢您链接我的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 2023-03-23
  • 2023-03-11
  • 2014-07-28
相关资源
最近更新 更多