python - Python在对字典进行排序时出错
问题描述
有一段时间没有使用 Python 了。在对字典进行排序时遇到了一些问题
我有一本字典,叫做bad_functions
holding ~500 pairs
例子 :{'lambda_1': 0, 'lambda_2': 0,, 'lambda_2': "unreserved}
代码 :
from contextlib import redirect_stdout
import subprocess
import json
# deafult region is us-east-2
region="us-east-2"
# command for getting all lambdas lambdas in eu-east-2
list_lambda_command = "aws lambda list-functions --region {region} --query 'Functions[].FunctionName' --output json"
# command for getting a specific lambda cuoncurrency
lambda_concurrency="aws lambda get-function-concurrency --function-name {function_name}"
# running the first aws cli command on host and load to list object
lambda_json_output = subprocess.check_output(['bash','-c', list_lambda_command.format(region=region)]).decode()
lambda_list=json.loads(lambda_json_output)
# empty list for incoming 'bad' lambda's results
bad_functions={}
for function in lambda_list:
# getting lambda funcations with unreserved concurreny value into a dict
try:
output=subprocess.check_output(['bash','-c', lambda_concurrency.format(function_name=function)]).decode()
current_lambda_concurrency=json.loads(output)
except:
bad_functions[f'{function}']="unreserved"
continue
# getting lambda funcations with 'bad' concurreny value value into a dict
current_concurrency=current_lambda_concurrency['ReservedConcurrentExecutions']
if current_concurrency != 1:
bad_functions[f'{function}']=int(current_concurrency)
# sorting the dic by value
print(bad_functions)
bad_functions_sorted={k: v for k, v in sorted(bad_functions.items(), key=lambda item: item[1])}
我得到的错误:
File "script.py", line 40, in <module>
bad_functions_sorted={k: v for k, v in sorted(bad_functions.items(), key=lambda item: item[1])}
TypeError: '<' not supported between instances of 'str' and 'int'
解决方案
我的不好,没有在问题中提供足够的信息。
可能的输出可能是
{'lambda_1': 0, 'lambda_2': 0,, 'lambda_2': "unreserved}
所以错误TypeError: '<' not supported between instances of 'str' and 'int'
很有意义
我为解决这个问题所做的是将它们分成 2 个不同的字典
for function in lambda_list:
try:
output=subprocess.check_output(['bash','-c', lambda_concurrency.format(function_name=function)]).decode()
current_lambda_concurrency=json.loads(output)
except:
unreserved_function[f'{function}']="unreserved"
continue
current_concurrency=current_lambda_concurrency['ReservedConcurrentExecutions']
if current_concurrency != 1:
concurrency_functions[f'{function}']=int(current_concurrency)
并且只对'int'字典进行排序
bad_functions_sorted={k: v for k, v in sorted(concurrency_functions.items(), key=lambda item: item[1])}
推荐阅读
- git - 尝试使用 git fetch 将我的非主分支更新为源
- xcode - CocoaPods:如何拥有一个包含多个项目(包括嵌入式框架和/或静态库)的工作区?
- reactjs - 无法开始全新安装 create-react-app
- javascript - Laravel 中的动态引导模式
- angular - 如何处理 Angular 中的猫鼬验证错误
- reactjs - 自定义 useForm 打字稿无法正常工作
- python - Matplotlib Funcanimation 在 Qt5Agg 后端调整窗口大小时恢复循环
- tailwind-css - 如何使用自定义类在 TailwindCSS 中为不同设备显示不同的图像?
- linux - 使用 curl 从 GitHub 运行 bash 脚本
- ios - 不显示角半径