list_1 = [{'1': 'name_1', '2': 'name_2', '3': 'name_3',},
{'1': 'age_1', '2': 'age_2' ,'3': 'age_3',}]
我想操作此列表,以便dicts包含特定ID的所有属性。 ID本身必须构成最终字典的一部分。示例输出如下所示:
list_2 = [{'id' : '1', 'name' : 'name_1', 'age': 'age_1'},
{'id' : '2', 'name' : 'name_2', 'age': 'age_2'},
{'id' : '3', 'name' : 'name_3', 'age': 'age_3'}]
然后我做了以下事情:
>>> list_2=[{'id':x,'name':list_1[0][x],'age':list_1[1][x]} for x in list_1[0].keys()]
然后它给出了:
>>> list_2
[{'age': 'age_1', 'id': '1', 'name': 'name_1'},
{'age': 'age_3', 'id': '3', 'name': 'name_3'},
{'age': 'age_2', 'id': '2', 'name': 'name_2'}]
但我不明白为什么' id'正在显示第二个位置,而#39; age'首先显示?
我尝试了其他方法,但结果是一样的。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:1)
要保留订单,您应该使用ordered dictionary。使用您的样本:
new_list = [OrderedDict([('id', x), ('name', list_1[0][x]), ('age', list_1[1][x])]) for x in list_1[0].keys()]
打印有序列表......
for d in new_list:
print(d[name], d[age])
name_1 age_1
name_3 age_3
name_2 age_2
答案 1 :(得分:0)
尝试使用OrderedDict:
list_1 = [collections.OrderedDict([('1','name_1'), ('2', 'name_2'), ('3', 'name_3')]),
collections.OrderedDict([('1','age_1'),('2','age_2'),('3', 'age_3')])]
list_2=[collections.OrderedDict([('id',x), ('name',list_1[0][x]), ('age', list_1[1][x])])
for x in list_1[0].keys()]
这更有可能保留您想要的订单。我还是Python新手,所以这可能不是超级Pythonic,但我认为它会起作用。
输出 -
In [24]: list( list_2[0].keys() )
Out[24]: ['id', 'name', 'age']
文档: https://docs.python.org/3/library/collections.html#collections.OrderedDict