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')])]