【问题标题】:How to append to a dictionary of dictionaries如何附加到字典字典
【发布时间】:2017-04-28 11:29:01
【问题描述】:

我正在尝试创建这样的字典字典:

food = {"Broccoli": {"Taste": "Bad", "Smell": "Bad"},
        "Strawberry": {"Taste": "Good", "Smell": "Good"}}

但我从 SQL 表中填充它。因此,我将 SQL 表拉到了一个名为“result”的 SQL 对象中。然后我得到了这样的列名:

nutCol = [i[0] for i in result.description]

表格有大约 40 个特征,所以它很长。

我能做到……

foodList = {}
for id, food in enumerate(result):
    addMe = {str(food[1]): {nutCol[id + 2]: food[2], nulCol[idx + 3]: 
            food[3] ...}}
    foodList.update(addMe)

但这当然看起来很糟糕,并且需要一段时间才能写出来。而且我还在研究我想如何构建这整个东西,所以我可能需要改变它几次......这可能会变得非常乏味。

有没有一种 DRY 方法可以做到这一点?

【问题讨论】:

  • 看看这对我来说不太适用,因为它是一本字典。这不仅仅是一次添加一个密钥/对。我需要能够说出类似 foodList["Chicken"]["Protein"] 的话
  • 您建议的代码不是在制作字典字典...是否有一个您认为是“id”的特定字段要与其他属性相关联?

标签: python dictionary


【解决方案1】:

为了使解决方案位置独立,您可以使用dict1.update(dict2)。这只是将 dict2 与 dict1 合并。

在我们的例子中,因为我们有 dict 的 dict,我们可以使用 dict['key'] 作为 dict1 并简单地添加任何额外的键值对作为 dict2。

这是一个例子。

food = {"Broccoli": {"Taste": "Bad", "Smell": "Bad"}, 
        "Strawberry": {"Taste": "Good", "Smell": "Good"}}

addthis = {'foo':'bar'}

假设你想在food['strawberry'] 中添加addthis dict,我们可以简单地使用,

food["Strawberry"].update(addthis)

得到结果:

>>> food
{'Strawberry': {'Taste': 'Good', 'foo': 'bar', 'Smell': 'Good'},'Broccoli': {'Taste': 'Bad', 'Smell': 'Bad'}}
>>>  

【讨论】:

    【解决方案2】:

    假设第 0 列是您希望用作键的内容,并且您确实希望构建一个字典字典,那么它:

    detail_names = [col[0] for col in result.description[1:]]
    foodList = {row[0]: dict(zip(detail_names, row[1:]))
                for row in result}
    

    概括,如果列 k 是您的身份,那么它:

    foodList = {row[k]: {col[0]: row[i]
                         for i, col in enumerate(result.description) if i != k}
                for row in result}
    

    (这里每个子字典都是除k列之外的所有列)

    【讨论】:

      【解决方案3】:

      addMe = {str(food[1]):dict(zip(nutCol[2:],food[2:]))}

      zip 将获取两个(或更多)项目列表并将元素配对,然后您可以将结果传递给 dict 以将配对转换为字典。

      【讨论】:

        猜你喜欢
        • 2023-02-24
        • 1970-01-01
        • 2012-02-14
        • 2021-05-17
        • 2019-06-29
        • 1970-01-01
        • 2018-12-27
        • 2020-12-06
        • 1970-01-01
        相关资源
        最近更新 更多