python - 在 Python 字典中对值进行排序
问题描述
我是 Python 的新手,不完全确定如何使用字典。我想将其中一个字典与另一个字典进行排序。所以我有类似下面给出的东西。每个顶点特征都是一个列表。
vertex_features = ['Charge', 'Time', 'TimeDelta', 'TimeSinceLastPulse']
..........
..........
a = {feature : [] for feature in vertex_features }
我想对 Time 功能进行排序(并获得相应的 Charge、Time Delta 等),我通过
hit_order = np.argsort(features['Time'])
但是,当我尝试
for feature in features:
features[feature] = features[feature][hit_order]
它给出了错误
TypeError: only integer scalar arrays can be converted to a scalar index
我也试过
for feature in features:
features[feature] = features[feature][for i in hit_order]
但无法获得排序列表。我不完全确定我是否理解我在这里的排序做错了什么。非常感谢您的帮助。
解决方案
您遇到的问题是 Python 列表不支持通过方括号语法重新排序。这是 Numpy 数组的一个特性。
当你在 Python 列表中使用方括号时,解释器要么期待一个标量索引,要么期待某种切片。
您可以将字典返回的特征列表包装在 np.array 中,而不是使用列表,如下所示:
import numpy as np
vertex_features = ['Charge', 'Time', 'TimeDelta', 'TimeSinceLastPulse']
features = {feature: [] for feature in vertex_features}
hit_order = np.argsort(features['Time'])
for feature in features:
features[feature] = np.array(features[feature])[hit_order]
或者当您声明您的 dict 理解时,将列表包装起来:
import numpy as np
vertex_features = ['Charge', 'Time', 'TimeDelta', 'TimeSinceLastPulse']
features = {feature: np.array([]) for feature in vertex_features}
hit_order = np.argsort(features['Time'])
for feature in features:
features[feature] = features[feature][hit_order]
推荐阅读
- vscode-settings - vscode 仅在自动完成中显示单个项目
- html - Mac模拟器中的Dock Hovering问题(html)
- microsoft-dynamics - 不同形式的相同实体
- swift - 有后退按钮时如何更改navigationBarTitle
- python - 如何用 python 删除 \u 和 \x 字符?
- vue.js - 如何使用帖子封面图像作为 twitter 的卡片图像
- image - 使用 PIL 和 tifffile 读取 MetaMorph stk 文件失败
- python - Firebird 和 Python 中的多个 AND 运算符
- php - $_POST 值返回空白/空
- java - 使用 XPath 选择 XSD 文件中的元素总是返回一个空列表