【问题标题】:How to build a list of nested dictionaries and lists如何构建嵌套字典和列表的列表
【发布时间】:2014-08-02 15:31:29
【问题描述】:

我正在尝试使用其他嵌套的字典列表创建一个字典列表。以下是列表完成后的样子...

[{'key':'value'},{'key':[{'key':'value'},{'key':'value'},]},]

这是我正在使用的代码:

dict1={}
list1=[]
dict2={}
list2=[]

for obj1 in some_list:
    dict1['key'] = value

    for obj2 in some_other_list:                
        dict2['key'] = value
        dict2['key'] = value
        dict2['key'] = value
        dict2['key'] = value
        dict2['key'] = value
        list2.append(dict2.copy())

    dict1['key'] = list2
    list1.append(dict1)

我的结果是 list2 在遍历 some_other_list 后一直在累积而不是清除。

【问题讨论】:

  • 你希望它在哪里被清除?这一切是否都存在于更大的循环中?
  • 抱歉造成混淆...编辑了我上面的代码以显示嵌套的 for 循环...没有更大的循环...obj1 有 2 次迭代,obj2 有 4 次迭代。
  • 缩进正确吗?最后两行应该在外部 for 循环内吗?你只分配例如list2 = [] 在循环之外,所以不清楚为什么你希望它在任何时候被清除。
  • 刚刚对最后两行进行了编辑...
  • 对于dict2['key'] = value 的每个赋值超出第一个,你显然是最后一个值。这是你想要的吗?

标签: python loops dictionary nested-lists


【解决方案1】:

你永远不会指定list2 应该被清除。我想你想要这样的东西:

for obj1 in some_list:
    dict1['key'] = value

    for obj2 in some_other_list:                
        ...

    dict1['key'] = list2
    list2 = [] # create new list to fill next time
    list1.append(dict1)

请注意,这会将 value 替换为 list2;您不需要“初始化”密钥,您可以完全忽略该行(这可能会更清楚)。

【讨论】:

  • 你的救命稻草……我整个上午都在为此苦苦挣扎……现在该喝杯咖啡了……
  • 没问题。你可以用dict2 做同样的事情,然后你就不需要.copy,如果不是所有的键都被替换,你也不会冒奇怪的副作用。
猜你喜欢
  • 2017-08-08
  • 2019-03-22
  • 1970-01-01
  • 2021-05-20
  • 2020-10-22
  • 2021-09-15
  • 2021-08-21
  • 1970-01-01
相关资源
最近更新 更多