【问题标题】:Appending to a dynamic list name with dictionary values使用字典值附加到动态列表名称
【发布时间】:2019-07-02 01:15:45
【问题描述】:

我希望在我遇到的 python 编码障碍上获得一些帮助。 手头的任务是将数千行 CSV 整理到一组列表中。我的 CSV 是 2 列。第一列是 PC 名称。第二列正在建设。 我可以使用 Excel 过滤,但查看可能有 900 多个列表(建筑物),有 10k 多台 PC 进行排序和分配,如果没有 excel 自动化,这将是一个很大的挑战。 所以我转向了 Python。自从我上次触摸它是 8 年前以来,我已经很生锈了。我的想法是: 1)我可以将建筑物作为我在开始时声明的大量列表的参考。

Bldng1[]
Bldng2[]
Bldng3[]

2) 我可以将包含作为 PC 的第一列和作为建筑物的第二列的 2 列 CSV 导出为 Python 字典 JSON 格式。 我的电脑={ “PC1”:“Bldng1”, “PC2”:“Bldng2”, “PC3”:“Bldng1”, “PC4”:“Bldng1”, “PC5”:“Bldng3”,

}

3) 有一个 for 循环遍历字典。

对于 my_PCs 中的个人电脑: bldng=myPCs[pcs] #本质上将建筑物名称放入变量中 print('Building name',bldng) # 验证我的名字是否正确

但我不知道现在如何将 PC 名称附加到建筑物列表中,因为建筑物和 PC 名称会随着每次迭代而改变。 我试过了:

bldng.append=['pcs']

认为该变量将填充建筑物名称,但没有奏效。 关于我哪里出错或我需要做什么的任何建议?我真的很讨厌做 excel 宏,并且很想提高我的 Python 技能。

基本上... 我有一组空列表

Bldng1[]
Bldng2[]
Bldng3[]
#A dictionary
myPCs={
"PC1": "Bldng1",
"PC2": "Bldng2",
"PC3": "Bldng1",
"PC4": "Bldng1",
"PC5": "Bldng3",
}
#And I want to achieve this:
Bldng1['PC1','PC3',"PC4']
Bldng2['PC2']
Bldng3['PC5']

提前谢谢你!! 我尝试了谷歌搜索并尝试了建议的方法,但找不到适合我需求的解决方案

代码如下:

Bldng1[]
Bldng2[]
Bldng3[]
    myPCs={
    "PC1": "Bldng1",
    "PC2": "Bldng2",
    "PC3": "Bldng1",
    "PC4": "Bldng1",
    "PC5": "Bldng3",
}


    for pcs in my_PCs:
        bldng=myPCs[pcs]
        bldng.append=['pcs']


Error
bldng.append=['pcs']
AttributeError: 'str' object has no attribute 'append'

【问题讨论】:

    标签: python-3.x list dictionary


    【解决方案1】:

    您的bldng.append 行语法不正确。 append 是一个你调用的函数,带有要附加的值:

    bldng.append(value)
    

    在您的 for 循环中,您只是在迭代 myPCs 字典的键。你想要的是来自myPCs 的值。因此,将其与 append 函数一起使用将如下所示:

    for key, value in myPCs.items():
        bldng.append(value)
    

    这将为您提供bldng 的这些值:

    bldng == ["Bldng1", "Bldng2", "Bldng1"]
    

    【讨论】:

    • 实际上,我确实想遍历键,对吗?我正在尝试检查字典中的每个项目 key:value (PC:bldng) 条目。然后,使用 bldng=myPCs[pcs] 从每个条目中获取建筑信息。然后决定将其添加到哪个建筑清单。因此,我需要找到一种方法来动态获取建筑物名称以引用具有相同名称的列表并将 PC 名称附加到该列表中。这有意义吗....?
    • 我在上面写的 for 循环示例让您可以访问 myPCs 字典中的每个 keyvalue。您可以在如下所示的代码块中找到它:for key, value in myPCs.items(): ...
    【解决方案2】:

    我一直在摆弄,直到我以某种方式让它工作。我现在找不到它的链接,但另一个用户的解决方案建议为一组列表创建一个字典,这样我就可以轻松地追加。

    bldngs={
    "Bldng1":[],
    "Bldng2":[],
    "Bldng3":[]
    }
    
    myPCs={
        "PC1": "Bldng1",
        "PC2": "Bldng2",
        "PC3": "Bldng1",
        "PC4": "Bldng1",
        "PC5": "Bldng3",
    }
    
    
    for pcs in myPCs:
        print('this is the pc',pcs)
        bldng=myPCs[pcs]
        print('this is the building',bldng)
        bldngs[bldng].append(pcs)
    
    print(bldngs)
    

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2021-04-20
      • 2023-03-23
      • 2016-01-16
      • 2023-02-02
      相关资源
      最近更新 更多