Python 将项目插入口述的中间

Python 将项目插入口述的中间,python,list,dictionary,Python,List,Dictionary,我有一个字典列表,其中所有的字典都包含相似的条目,但有些字典缺少某些条目。下面是一个示例,展示了它的外观: data = [ { 'city' : Toronto, 'colour' : blue }, { 'city' : London, 'country' : UK 'colour' : green, 'n

我有一个字典列表,其中所有的字典都包含相似的条目,但有些字典缺少某些条目。下面是一个示例,展示了它的外观:

data = [
         { 
           'city' : Toronto,
           'colour' : blue
         },
         {
           'city' : London,
           'country' : UK
           'colour' : green,
           'name' : Alex
         },
         {
           'city' : Kingston,
           'colour' : purple,
           'name' : Alex
         }
      ]
我需要通过在较小的dict中插入项目(具有相同的键但为空值)来匹配最大dict的格式。我还需要保留钥匙的顺序,这样我就不能只在最后插入钥匙。按照上一个示例,它将如下所示:

data = [
         { 
           'city' : Toronto,
           'country' : ,
           'colour' : blue,
           'name' : 
         },
         {
           'city' : London,
           'country' : UK
           'colour' : green,
           'name' : Alex
         },
         {
           'city' : Kingston,
           'country' : ,
           'colour' : purple,
           'name' : Alex
         }
       ]
我不知道如何循环并向每个dict添加条目,因为我比较的dict大小不同。我试着复制最大的dict并对其进行编辑,在每个dict的末尾添加空白值并重新格式化,并在循环过程中创建新的dict,但到目前为止没有任何效果。 这是我到目前为止的代码(其中所有的_键都是按正确顺序排列的所有键的列表)


如何格式化此文件?谢谢

您可以使用
设置

import json
d = [{'city': 'Toronto', 'colour': 'blue'}, {'city': 'London', 'country': 'UK', 'colour': 'green', 'name': 'Alex'}, {'city': 'Kingston', 'colour': 'purple', 'name': 'Alex'}]
full_keys = {i for b in map(dict.keys, d) for i in b}
final_dict = [{i:b.get(i) for i in full_keys} for b in d]
print(json.dumps(final_dict, indent=4))
输出:

[
 {
    "colour": "blue",
    "city": "Toronto",
    "name": null,
    "country": null
 },
 {
    "colour": "green",
    "city": "London",
    "name": "Alex",
    "country": "UK"
},
{
    "colour": "purple",
    "city": "Kingston",
    "name": "Alex",
    "country": null
 } 
]

字典被认为是无序的(除非您使用的是Python 3.7+)。如果需要特定的订单,则必须明确指定


对于Python 3.7之前的Python,dict是无序的。这会在每个dict的末尾添加新的条目。我的其余代码依赖于所有键的顺序相同。还有其他方法吗?@Aya在Python 3.7之前,字典是无序的。无论哪种方式,都不会有太大的区别,因为新条目将根据您所需的输出添加。
[
 {
    "colour": "blue",
    "city": "Toronto",
    "name": null,
    "country": null
 },
 {
    "colour": "green",
    "city": "London",
    "name": "Alex",
    "country": "UK"
},
{
    "colour": "purple",
    "city": "Kingston",
    "name": "Alex",
    "country": null
 } 
]
from collections import OrderedDict

keys = sorted(set().union(*data))
res = [OrderedDict([(k, d.get(k, '')) for k in keys]) for d in data]
print(res)

[OrderedDict([('city', 'Toronto'),
              ('colour', 'blue'),
              ('country', ''),
              ('name', '')]),
 OrderedDict([('city', 'London'),
              ('colour', 'green'),
              ('country', 'UK'),
              ('name', 'Alex')]),
 OrderedDict([('city', 'Kingston'),
              ('colour', 'purple'),
              ('country', ''),
              ('name', 'Alex')])]