1

我有以下结构:

[
  {
    u'123456': {'name': "Bill"}, 
    u'234567': {'name': "Dave"},
    u'345678': {'name': "Tom"}
  },
]

在 for 循环期间,使用 extend 函数将新项目添加到列表中。不幸的是,这导致了以下结构:

    [
      {
        u'123456': {'name': "Bill"}, 
        u'234567': {'name': "Dave"},
        u'345678': {'name': "Tom"}
      },
      {
        u'555555': {'name': "Steve"}, 
        u'666666': {'name': "Michael"},
        u'777777': {'name': "George"}
      }
    ]

预期的结果实际上是一个平面结构,如下所示:

    [
      {
        u'123456': {'name': "Bill"}, 
        u'234567': {'name': "Dave"},
        u'345678': {'name': "Tom"},
        u'555555': {'name': "Steve"}, 
        u'666666': {'name': "Michael"},
        u'777777': {'name': "George"}
      }
    ]

是否可以附加到列表中,以便以平坦的方式构建结构。

或者

循环完成后是否可以变平?

4

4 回答 4

2

如果您的列表被命名l,您可以使用l[0].update(new_dict). 例子:

l = [{u'123456': {'name': "Bill"}}]
l[0].update({u'234567': {'name': "Dave"}})
print(l)

漂亮的格式化输出是:

[
    {
       u'123456': {'name': 'Bill'}, 
       u'234567': {'name': 'Dave'}
    }
]
于 2013-05-27T10:28:54.263 回答
1

你目前有这样的东西:

mylist.extend(newdict)

你应该使用这个:

mylist[0].update(newdict)
于 2013-05-27T10:30:11.577 回答
0

您可以将两个字典的项目添加在一起:

>>> mylist = [
  {
    u'123456': {'name': "Bill"}, 
    u'234567': {'name': "Dave"},
    u'345678': {'name': "Tom"}
  },
]
>>> mydict = {
  u'555555': {'name': "Steve"}, 
  u'666666': {'name': "Michael"},
  u'777777': {'name': "George"}
}
>>> [dict(mylist[0].items() + mydict.items())]
[{u'123456': {'name': 'Bill'}, u'555555': {'name': 'Steve'}, u'777777': {'name': 'George'}, u'666666': {'name': 'Michael'}, u'345678': {'name': 'Tom'}, u'234567': {'name': 'Dave'}}]

虽然这样做更干净.update()

>>> mylist[0].update(mydict)
于 2013-05-27T10:30:29.430 回答
0

您可以使用.update(),但是如果您有重复的键,这将覆盖值。

def flatten(results):
    newresult = {}
    for subdict : results:
        newresult.update(subdict)
    return [newresult]
于 2013-05-27T10:31:38.303 回答