【问题标题】:python nested dict get dict object with max keypython嵌套dict获取具有最大键的dict对象
【发布时间】:2020-10-11 11:17:44
【问题描述】:

我有一个 dd 对象:

dd = {'111': {'10': {'cid': '555', 'num': '0'}}, '222': {'10': {'cid': '555', 'num': '2'}}, '333': {'10': {'cid': '555', 'num': '2'}}, '121': {'10': {'cid': '555', 'num': '4'}}}

cid相似。

我需要用 num 找到最大 dd 对象:

想要的:

所需:{'121': {'10': {'cid': '555', 'num': '4'}}}

我知道如何遍历嵌套字典以找到最大键

 print(max(int(z['num']) for d in dd.values() for z in d.values()))  # 4

^ 但这给出了num 的值,而不是完整的对象

【问题讨论】:

  • max(dd.items(), key=lambda i: int(i[1]['10']['num'])).
  • @ekhumoro 很聪明,但如果 10 不常见怎么办?
  • @JackJee 二级字典有多个项目吗?
  • dict([max(dd.items(), key=lambda i: int(list(i[1].values())[0]['num']))]).

标签: python python-3.x dictionary


【解决方案1】:

下面

dd = {'111': {'10': {'cid': '555', 'num': '0'}}, '222': {'10': {'cid': '555', 'num': '2'}},
      '333': {'10': {'cid': '555', 'num': '2'}}, '121': {'10': {'cid': '555', 'num': '4'}}}

pair = max([(int(v['num']), val, key) for key, val in dd.items() for v in val.values()], key=lambda item: item[0])
print({pair[2]: pair[1]})

输出

{'121': {'10': {'cid': '555', 'num': '4'}}}

【讨论】:

  • 更改dict 对象位置,会给出不正确的结果。例如在这个输入数据dd = {'111': {'10': {'cid': '555', 'num': '4'}}, '222': {'10': {'cid': '555', 'num': '2'}}, '333': {'10': {'cid': '555', 'num': '2'}}, '444': {'10': {'cid': '555', 'num': '3'}}} 上它给出了不正确的结果
  • @JackJee 我已经使用你的dd 测试了代码并得到了预期的结果:{'10': {'cid': '555', 'num': '3'}}
  • 是的,这是不正确的。看到dd中有一个num:4
  • @JackJee 错误已解决。但是代码不是很好..
猜你喜欢
  • 2020-07-22
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多