根据特定值排序dicts的词典

时间:2018-03-07 09:45:15

标签: python python-2.7

我确实有一个ditcs的字典; 这需要按照FAIL组首先出现在dict中然后传递的方式进行排序(即使有一个“FAIL”条件,它们应该组合在一起)。

添加更多详细信息 如果我按照我想做的值的字母顺序排序

sorted_d1=collections.OrderedDict(d1.items(),lambda x:x[1])

但是如果我在值中找到“FAIL”字符串并将它们分组,我该怎么做呢?请帮忙解决这个问题

d1 = 
{
    'test1':{'condition1':'PASS','condition2':'FAIL','condition3':'-'},
    'test2':{'condition1':'PASS','condition2':'PASS','condition3':'-'},
    'test3':{'condition1':'-'   ,'condition2':'PASS','condition3':'-'},
    'test4':{'condition1':'PASS','condition2':'-'   ,'condition3':'-'},
    'test5':{'condition1':'-'   ,'condition2':'FAIL','condition3':'-'},
    'test6':{'condition1':'FAIL','condition2':'PASS','condition3':'-'},
    'test7':{'condition1':'FAIL','condition2':'-'   ,'condition3':'-'}
}

sorted_d1 =  
{  
    'test1':{'condition1':'PASS','condition2':'**FAIL**','condition3':'-'},
    'test5':{'condition1':'-'   ,'condition2':'**FAIL**','condition3':'-'},
    'test6':{'condition1':'**FAIL**','condition2':'PASS','condition3':'-'},
    'test7':{'condition1':'**FAIL**','condition2':'-'   ,'condition3':'-'},
    'test2':{'condition1':'PASS','condition2':'PASS','condition3':'-'},
    'test3':{'condition1':'-'   ,'condition2':'PASS','condition3':'-'},
    'test4':{'condition1':'PASS','condition2':'-'   ,'condition3':'-'}
}

1 个答案:

答案 0 :(得分:0)

我不是订购dicts的忠实粉丝,所以这里有一个键列表:

result = []
for key, my_dict in d1.items():
    if 'FAIL' in my_dict.values():
        result.insert(0, key)
    else:
        result.append(key)

print(result)

包含' FAIL'的密钥先来。除此之外,没有特别的顺序。如果您需要区分“FAIL”而不是“FAIL”'并且保留原始订单(我认为这是由密钥表示的),您可以制作两个列表,一个列有' FAIL'一个没有,只是排序那些。