python - python中字典中的冒泡排序
问题描述
我正在尝试按降序进行冒泡排序
input={"m":1,"i":4,"s":4,"P":2}
output={"i":4,"s":4,"p":2,"m":1}
但发生类型错误。我怎样才能做到这一点?
下面是代码:
dict={"m":1,"i":4,"s":4,"P":2}
for key,value in dict.items():
if(dict[key]<dict[key+1]):
temp=dict[key]
dict[key]=dict[key+1]
dict[key+1]=temp
print(dict)
解决方案
字典没有顺序:如果您在字典中添加/删除/更新元素,则迭代键的顺序可能会改变。
所以你不能“排序”字典。但是,您可以做的是例如对2-tuples 列表进行排序,例如:
my_list = list(my_dict.items())
然后我们检索:
>>> my_list
[('m', 1), ('i', 4), ('s', 4), ('P', 2)]
然后我们可以对列表进行排序(例如使用bubblesort),如下所示:
for mx in range(len(my_list)-1, -1, -1):
swapped = False
for i in range(mx):
if my_list[i][1] < my_list[i+1][1]:
my_list[i], my_list[i+1] = my_list[i+1], my_list[i]
swapped = True
if not swapped:
break
然后,我们有:
>>> my_list
[('i', 4), ('s', 4), ('P', 2), ('m', 1)]
推荐阅读
- python - 请建议 python 代码从具有用户和密码的 gitub 克隆存储库
- python - argparse 中不同级别的帮助详细程度
- javascript - 无法使用 Z-Index 和声明位置获取另一个元素
- python - 如何使用 Selenium WebDriver 和 Python 从表中获取元素(文本)
- node.js - OpenID、Express、React - 通过身份验证将获得的令牌从后端发送到前端
- laravel - 模型:独立或“影子副本”——我的关系是我能做到的最好的吗?
- php - 在 WooCommerce 感谢页面上显示自定义复选框字段状态
- html - bootstrap 4.5.3 用图标居中导航栏文本
- json - 未处理的异常:键入“列表”
' 不是类型 'List 的子类型 ' - c# - 根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性