如何在这个嵌套字典中获取最小非零值

2024-09-29 22:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本嵌套字典:

+-------------+--------------+-------------------+
|    PAK ID   | License used | License available |
+-------------+--------------+-------------------+
| ASG6C1TU08I |      15      |        235        |
| HK5JQ5TFR8Z |      50      |         0         |
| 4HIZBOYUS9S |      81      |        169        |
| 4T6Y77AK1LZ |      50      |         0         |
| X2ACDW29EEH |      50      |         0         |
| W487IEVM0BD |      50      |         0         |
+-------------+--------------+-------------------+

>>> print(license_dic)
{'entry1': {'pak_id': 'ASG6C1TU08I', 'used_license': '15', 'available_license': '235'}, 'entry3': {'pak_id': 'HK5JQ5TFR8Z', 'used_license': '50', 'available_license': '0'}, 'entry5': {'pak_id': '4HIZBOYUS9S', 'used_license': '81', 'available_license': '169'}, 'entry7': {'pak_id': '4T6Y77AK1LZ', 'used_license': '50', 'available_license': '0'}, 'entry9': {'pak_id': 'X2ACDW29EEH', 'used_license': '50', 'available_license': '0'}, 'entry11': {'pak_id': 'W487IEVM0BD', 'used_license': '50', 'available_license': '0'}}

我可以使用以下方法获取“可用许可证”最大值的密钥:

for k,v in license_dic.items():
    max_entry =max(license_dic, key=lambda v: license_dic[v]['available_license'])

返回:

>>entry1

我正在尝试获取“available_license”的最小非零值的密钥,在这种情况下,它应该返回“entry5”,因为“entry5具有最低的非零值”available_license

我试过:

for k,v in license_dic.items():
     min_entry =min(license_dic, key=lambda v: license_dic[v]['available_license'] if key !=0)

但是我得到了一个语法错误


Tags: keyidlicense密钥usedavailabledicpak
1条回答
网友
1楼 · 发布于 2024-09-29 22:00:01
  1. 您完全不需要循环,单个max/min语句很有用
  2. 您正在比较str类型,需要将它们解析为int
  3. 在测试中需要一个else,比如使用10**10(100亿)作为默认值来替换0,因为您可以使用一个丑陋的if/else(见末尾)或使用一个布尔方式来替换or

最后你需要

max_entry = max(license_dic, key=lambda k: int(license_dic[k]['available_license']))
# entry1

min_entry = min(license_dic,key=lambda k:int(license_dic[k]['available_license']) or 10**10)
# entry5

丑陋的方式

min_entry = min(license_dic, key=lambda k: int(license_dic[k]['available_license']) if int(license_dic[k]['available_license']) != 0 else 10 ** 10)

相关问题 更多 >

    热门问题