如何在python字典中从预定义的lis进行排序

2024-05-23 15:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有下面的字典

{u'Item1': {'sizes': [u'TT', u'Al', u'TB'], 'jobs': OrderedDict([(u'TT', [{'assign': u'Basi', 'size': u'TTAZ_FI', 'state__name': u'pending', 'id': 1717L, 'item_type': u'Item1'}]),  (u'Al', [{'assign': u'Item1', 'size': u'All', 'state__name': u'success', 'id': 1714L, 'item_type': u'Item1'}]), ... 

我有一个列表A = [RQ, TT, SA, PD, Al, ..]

我试图根据这个列表来安排工作,它是orderedict(orderedict([(u'TT'))中的一个键。我是否可以用上面提到的清单重新排列订购的信息?所以第一个键就是RQ和它对应的列表?有什么主意吗?提前谢谢

*************************************编辑*********************************************

dict={key:list(d表示grp中的d)for key,grp-initertools.groupby组(data,key=lambda d:d['item_type'])}#d['item_type']将是键

数据是Django查询列表 我的名单:

A = ['FF', 'RO', 'FP', 'OX', 'NP', 'BF', 'IJ', 'IN', 'RB', 'PC', 'CT' , 'PH', 'HP', 'LW', 'BH', 'HJ', 'HN', 'XW', 'GN', 'GP', 'TJ', 'RG', 'BN', 'BP', 'PP', 'IBP', 'EG', 'PG', 'TT', 'TB', 'RM']

Tags: keynameid列表sizetypeitemtb
1条回答
网友
1楼 · 发布于 2024-05-23 15:41:41

给定以下变量

A = ['FF', 'RO', 'FP', 'OX', ...]
jobs = OrderedDict([
    (u'TT', [{...}]),
    (u'FF', [{...}]),
])

您可以构建一个键函数来对OrderedDict进行排序

key = lambda job: A.index(job[0])
jobs = OrderedDict(sorted(jobs.items(), key=key))

代码A.index(job[0])返回作业的索引,该索引用作排序作业的键。你知道吗

编辑

此时,为key编写一个命名函数可能是值得的

# this will be the index value of codes not in the list "A"
end_index = len(A)+1

def key(job):
    code = job[0]
    if code in A: 
        return A.index(code)
    return end_index

jobs = OrderedDict(sorted(jobs.items(), key=key))

相关问题 更多 >