首页 > 解决方案 > 在 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]

但无法获得排序列表。我不完全确定我是否理解我在这里的排序做错了什么。非常感谢您的帮助。

标签: pythondictionary

解决方案


您遇到的问题是 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]

推荐阅读