Python:根据值的出现在字典列表中对特定的字典对进行排序

时间:2014-07-17 05:17:13

标签: python

示例:

[{type:"fjsjo"}, {type:"cccc"}, {type:"xxxx"}, {type:"oooo"}]

结果

[{type:"fjsjo"}, {type:"xxxx"}, {type:"cccc"}, {type:"oooo"}]

我总是需要在“cccc”之前找到“xxxx”字典。如何转换字典,以便当它检测到包含值“cccc”和“xxxx”的字典出现时彼此相邻或者可能在这两者之间有另一个字典时,可以转换为“xxxx”始终领先于“cccc”?

示例:

[{type:"fjsjo"}, {type:"cccc"}, {type:"oooo"} , {type:"xxxx"}, {type:"oooo"}]

结果

[{type:"fjsjo"}, {type:"xxxx"}, {type:"oooo"} , {type:"cccc"}, {type:"oooo"}]

此外,如果有两个集合或多个相同类型的集合,则应始终对最靠近左侧的字典进行排序。

所以

示例:

[{type:"cccc"}, {type:"xxxx"} , {type:"cccc"}, {type:"xxxx"}]

结果

[{type:"xxxx"}, {type:"cccc"} , {type:"xxxx"}, {type:"cccc"}]

每当“cccc”出现在“xxxx”之前时,这两个词典必须切换位置。如果他们已经换了位置,那么他们就不能再换了。所以中间的两个词典不会切换。

示例:

[{type:"cccc"}, {type:"xxxx"} , {type:"cccc"}]

结果

[{type:"xxxx"}, {type:"cccc"} , {type:"cccc"}]

示例:

[{type:"cccc"}, {type:"oooo"} , {type:"xxxx"}, {type:"cccc"},{type:"xxxx"}]

结果

[{type:"xxxx"}, {type:"oooo"} , {type:"cccc"}, {type:"xxxx"},{type:"cccc"},{type:"cccc"}]

1 个答案:

答案 0 :(得分:1)

我认为你的类型被引用并试试这个

a=[{'type':"cccc"}, {'type':"oooo"} , {'type':"xxxx"}, {'type':"cccc"},{'type':"xxxx"}]

xxlist=[]

for index,dix in enumerate(a):
    if dix['type']=='xxxx':
        xxlist.append(a.pop(index))
new=[]
for i in a:
    if i['type']=='cccc':
        new.append(xxlist.pop(0))
        new.append(i)
    else:
        new.append(i)

if len(xxlist)>0:
    for i in xxlist:
       new.append(i)
print new

输出

[{'type': 'xxxx'}, {'type': 'cccc'}, {'type': 'oooo'}, {'type': 'xxxx'}, {'type': 'cccc'}]