我有这个嵌套字典:
+-------------+--------------+-------------------+
| 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'}}
我可以使用以下方法获取“可用许可证”最大值的 key :
for k,v in license_dic.items():
max_entry =max(license_dic, key=lambda v: license_dic[v]['available_license'])
返回结果:
>>entry1
我正在尝试获取“available_license”的最小非零值的 key ,在本例中,它应该返回“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)
但是我收到语法错误
最佳答案
- 您绝对不需要循环,单个
max/min
语句很有用。 - 您正在比较
str
类型,需要将它们解析为int
- 您的测试中需要一个
else
,例如使用10**10
(100 亿)作为默认值来替换 0,因为您可以使用一个丑陋的if/else
(见最后)或使用带有or
的 bool 方法
最后你需要
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)
关于python - 如何获取此嵌套字典中的最小非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59760137/