【问题标题】:Sort dictionary with multiple values对具有多个值的字典进行排序
【发布时间】:2015-10-29 16:40:19
【问题描述】:

我正在尝试对字典进行排序,并且查看了许多示例,但它们都显示了非常简单的字典。我查看了orderedDict、itemgetter、lambda 等,但我看不到如何按位置、homepoints 或 awaypoints 对这个字典进行排序:

{
    u'SwanseaCityFC': {
        'position': 12,
        'awayPoints': 7,
        'homePoints': 8
    },
    u'TottenhamHotspurFC': {
        'position': 6,
        'awayPoints': 11,
        'homePoints': 9
    },
    u'StokeCityFC': {
        'position': 14,
        'awayPoints': 9,
        'homePoints': 4
    },
    u'AstonVillaFC': {
        'position': 20,
        'awayPoints': 4,
        'homePoints': 1
    },
    u'ManchesterCityFC': {
        'position': 1,
        'awayPoints': 10,
        'homePoints': 12
    },
    u'AFCBournemouth': {
        'position': 17,
        'awayPoints': 5,
        'homePoints': 5
    },
    u'CrystalPalaceFC': {
        'position': 7,
        'awayPoints': 9,
        'homePoints': 6
    },
    u'NewcastleUnitedFC': {
        'position': 19,
        'awayPoints': 3,
        'homePoints': 5
    },
    u'NorwichCityFC': {
        'position': 16,
        'awayPoints': 6,
        'homePoints': 4
    },
    u'WatfordFC': {
        'position': 13,
        'awayPoints': 10,
        'homePoints': 5
    },
    u'ManchesterUnitedFC': {
        'position': 4,
        'awayPoints': 11,
        'homePoints': 11
    },
    u'LeicesterCityFC': {
        'position': 5,
        'awayPoints': 10,
        'homePoints': 10
    },
    u'ChelseaFC': {
        'position': 15,
        'awayPoints': 5,
        'homePoints': 7
    },
    u'WestHamUnitedFC': {
        'position': 3,
        'awayPoints': 14,
        'homePoints': 7
    },
    u'SunderlandAFC': {
        'position': 18,
        'awayPoints': 3,
        'homePoints': 5
    },
    u'SouthamptonFC': {
        'position': 8,
        'awayPoints': 8,
        'homePoints': 7
    },
    u'EvertonFC': {
        'position': 11,
        'awayPoints': 10,
        'homePoints': 5
    },
    u'LiverpoolFC': {
        'position': 9,
        'awayPoints': 8,
        'homePoints': 8
    },
    u'ArsenalFC': {
        'position': 2,
        'awayPoints': 13,
        'homePoints': 10
    },
    u'WestBromwichAlbionFC': {
        'position': 10,
        'awayPoints': 11,
        'homePoints': 4
    }
}

任何帮助表示赞赏!

【问题讨论】:

  • dicts 不保留任何排序,因此您需要构建一个列表或使用 OrderedDict 来维护元素的顺序。将元素整理好需要一个关键功能。我认为这里有一些很好的例子:wiki.python.org/moin/HowTo/Sorting
  • This 没有解决你的问题?!​​
  • Python dict 数据结构没有内在的顺序。也许你应该考虑一个数据框(Pandas)类型的结构。

标签: python sorting dictionary


【解决方案1】:

Sort dictionary by multiple values 为起点,以下是您可以对排序执行哪些操作的示例。

dict = { ... your dictionary ... }
# sort by position
for item in sorted(dict, key = lambda k: dict[k]['position']):
    print(dict[item])

# sort by awayPoints, then position; note the lambda uses a tuple
for item in sorted(dict, key = lambda k: (dict[k]['awayPoints'], dict[k]['position'])):
    print(mylist[item])

【讨论】:

    【解决方案2】:

    转到collections文档可以看到OrderedDict实现笔记https://docs.python.org/3/library/collections.html#collections.OrderedDict

    下面有一个例子:

    >>> # dictionary sorted by value
    >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
    OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
    

    然后您可以将其扩展到您自己的用途:

    >>> d = {'banana':{'key':3},'apple':{'key':4}, 'pear': {'key':1}, 'orange': {'key':2}}
    >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]['key']))
    OrderedDict([('pear', {'key': 1}), ('orange', {'key': 2}), ('banana', {'key': 3}), ('apple', {'key': 4})])
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 2016-03-14
      • 2023-03-14
      • 2018-09-16
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多