在python中组合和排序字典

时间:2015-12-13 05:12:18

标签: python dictionary

如果我有多个这样的词典:

dict1 = {Jamal: 10, Steve: 20}  
dict2 = {Frank: 200, Steve: 30}  
dict3 = {Carl: 14, Jamal: 26}

我如何组合它们并按数字的降序排序它们而不覆盖任何值,以便它显示如下:

Frank: 200, Steve: 30, Jamal: 26, Steve: 20, Carl: 14, Jamal: 10

2 个答案:

答案 0 :(得分:0)

您无法使用重复键创建字典,请使用dict.setdefaultdict1 = {'Jamal': 10, 'Steve': 20} dict2 = {'Frank': 200, 'Steve': 30} dict3 = {'Carl': 14, 'Jamal': 26} from collections import OrderedDict from itertools import chain from operator import itemgetter d = OrderedDict() for key, value in sorted(chain.from_iterable([dict1.items(),dict2.items(),dict3.items()]), key=itemgetter(1),reverse=True): d.setdefault(key,[]).append(value) print d OrderedDict([('Frank', [200]), ('Steve', [30, 20]), ('Jamal', [26, 10]), ('Carl', [14])]) 方法将相对值放入列表中:

print sorted(chain.from_iterable([dict1.items(),dict2.items(),dict3.items()]), key=itemgetter(1),reverse=True)


[('Frank', 200), ('Steve', 30), ('Jamal', 26), ('Steve', 20), ('Carl', 14), ('Jamal', 10)]

或者只是排序如下:

$phpObj = json_decode($json);

if (!is_null($phpObj->raw))
{   
    $object = $phpObj->raw;

    foreach ($object as $obj)
    {
       echo "<tr id='clubs-search-result'><td class='club-search-name'>" . $obj->name . "</td><td class='blaze-id hidden'>" . $obj->blazeId . "</td><td><button type='button' class='form-button players-search-button red-bg'>Select</button></td></tr>";
    }
}

答案 1 :(得分:0)

Stevedict1中有两个dict2。映射类型不允许重复的密钥。

您需要使用序列类型(例如listtuple,..)。

>>> dict1 = {'Jamal': 10, 'Steve': 20}
>>> dict2 = {'Frank': 200, 'Steve': 30}
>>> dict3 = {'Carl': 14, 'Jamal': 26}
>>>
>>> import itertools
>>> it = itertools.chain.from_iterable(d.items() for d in (dict1, dict2, dict3))
>>> ', '.join('{}: {}'.format(*x) for x in sorted(it, key=lambda x: x[1], reverse=True))
'Frank: 200, Steve: 30, Jamal: 26, Steve: 20, Carl: 14, Jamal: 10'