gpt4 book ai didi

python强制一个特定的键总是在字典的开头

转载 作者:行者123 更新时间:2023-11-28 21:48:43 25 4
gpt4 key购买 nike

如何强制特定键始终位于字典的开头。例如。如果我有这样一个字典列表:

source = [{'age':39, 'name':'Homer','gender':'male', 'IQ':0}, {'age':10, 'gender':'male', 'IQ':0,'name':'Bart'}]

需要 'name' 始终是字典中的第一个键:

source = [{'name':'Homer','age':39, 'gender':'male', 'IQ':0}, {'name':'Bart','age':10, 'gender':'male','IQ':0}]

我曾尝试使用运算符,但它按字母顺序排列名称的值,这不是我想要的。

from operator import itemgetter
newlist = source.sort(key=operator.itemgetter('name'))

最佳答案

我会尝试 OrderedDict如下所示,我只是使用 counter 变量作为 defaultdict 的键,它将值存储为 ordereddict 而这个 ordereddict 顾名思义是一个有序字典,您可以将此 ordereddict 用作​​常规字典 - 请参阅我使用属性访问,即 item[1]['name'] 打印 name 键的值。最后,sort_order 是一个字典,它将键的顺序存储为值,您可以根据需要修改它。

from collections import OrderedDict,defaultdict
data = defaultdict(OrderedDict)
source = [{'age':39, 'name':'Homer','gender':'male', 'IQ':0}, {'age':10, 'gender':'male', 'IQ':0,'name':'Bart'}]
counter = 0
sort_order = {'IQ': 1, 'gender': 2, 'age': 3, 'name': 0}
for i in source:
odrded_keys = sorted(i,key=lambda x: sort_order[x])
tmp = OrderedDict(sorted(i.items(),key=lambda x: sort_order[x[0]]))
data[counter].update(tmp)
counter+=1
for item in data.items():
print item[1]
print item[1]['name']

输出打印-

OrderedDict([('name', 'Homer'), ('IQ', 0), ('gender', 'male'), ('age', 39)])
Homer
OrderedDict([('name', 'Bart'), ('IQ', 0), ('gender', 'male'), ('age', 10)])
Bart

编辑

正如评论中所讨论的(OP 不知道键的长度,但它们中有一个键是 name 并且它需要是第一个)我修改了代码如下 -

from collections import OrderedDict,defaultdict
data = defaultdict(OrderedDict)
source = [{'age':39, 'name':'Homer','gender':'male', 'IQ':0}, {'age':10, 'gender':'male', 'IQ':0,'name':'Bart'}]
counter = 0
for i in source:
#get keys dynamically and remove 'name' form it and insert at first
keys = i.keys()
keys.remove('name')
keys.insert(0,'name')
#sort the dictionary by list element index- i.e. position
tmp = OrderedDict(sorted(i.items(),key=lambda x: keys.index(x[0])))
data[counter].update(tmp)
counter+=1
for item in data.items():
print item[1]
print item[1]['name']

输出-

OrderedDict([('name', 'Homer'), ('IQ', 0), ('gender', 'male'), ('age', 39)])
Homer
OrderedDict([('name', 'Bart'), ('IQ', 0), ('gender', 'male'), ('age', 10)])
Bart

关于python强制一个特定的键总是在字典的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com