【问题标题】:Sorting a dictionary by an inner "attribute" dictionary key-value按内部“属性”字典键值对字典进行排序
【发布时间】:2019-01-25 11:04:11
【问题描述】:

我使用 for 循环和这段代码创建了一个字典:

players[name] = {'roll_total': player_roll, 'ante': None}

以前我的字典只是 player = {names: totals},我可以使用以下代码对其进行排序:

players = [(k, players[k]) for k in sorted(players, key=players.get, reverse=True)]

但现在由于我实现了内部“属性”字典,我收到一个错误,提示无法在字典上进行比较。

TypeError: '

那么如何修改排序方法来比较字典的值(roll_total 值),并对我的玩家字典进行排序?

【问题讨论】:

  • key=lambda x: players[x]['roll_total']
  • 给出一个完整的例子来说明你当前的字典和你想要的输出。

标签: python python-3.x sorting dictionary


【解决方案1】:

这是因为您正在比较两个字典。使用:

players = [(k, players[k]) for k in sorted(players, key=lambda x: players[x]['roll_total'], reverse=True)]

lambda 函数接收 name 为 x 的键,然后根据 player[x]['roll_total'] 进行排序,基本上是 player[name]['roll_total']。

【讨论】:

  • 为什么你的语句有 (k, player[k]) 作为字典理解的示例语句中的键:值? dict_variable = {key:value for (key,value) in dictonary.items()} 另外,你有方括号表示列表而不是字典,为什么?
  • 确实如此,因为它创建了一个元组列表。为什么?因为这就是您在排序时在问题中所做的。如果您想要字典字典,则可以修改代码: player = {{k: player[k]} for k in sorted(players, key=lambda x: player[x]['roll_total'], reverse=True )}
【解决方案2】:

您也可以将其设为字典理解,然后将其分配给您正在迭代的字典的变量名。这样,您就可以保留字典,并可以在某些逻辑节点对其进行更改,使其在以后的程序流中按排序方式可用。例如,也许您希望获胜者开始下一轮,或者类似的事情,而不是从列表中创建一个新字典,您已经有了字典,只需一次操作:

{k: players[k] for k in sorted(players, key=lambda x: players[x]['rolltotal'], reverse=True)}

【讨论】:

  • 你能推荐我一些阅读材料,或者我可以交互运行的代码,以便我理解这个语句吗? dict_variable = {key:value for (key,value) in dictonary.items()} 但在你的陈述中,我没有看到 (key,value) 只是一个键,然后你的陈述没有字典。项目()。
  • @Casey IMO 中最好的之一:compciv.org/guides/python/fundamentals/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2021-10-15
  • 1970-01-01
  • 2011-07-08
  • 2012-03-19
相关资源
最近更新 更多