如何在python 2.7中基于另一个数组对一个多阵列dict进行排序

时间:2015-03-28 01:05:54

标签: python sorting dictionary multidimensional-array

我有一些数据(在数组中),我想在另一个字典上排序(优先级) 实施例

refList = ['INDIA', 'CHINA','USA']

list = { 'Country': [], 'Reps' : []}

list['Country'].append('CHINA')
list['Reps'].append('Xuan Fo')
list['Country'].append('CHINA')
list['Reps'].append('Chan Li')
list['Country'].append('USA')
list['Reps'].append('Jhon Dugg')
list['Country'].append('USA')
list['Reps'].append('Michael Bevan')
list['Country'].append('INDIA')
list['Reps'].append('Rahul Kartik')

我正在尝试根据refList给定的国家/地区名称对列表进行排序。

我看到了类似

的内容
newlist = sorted(list['Country'], key=lambda k: refList) 

但它没有给我所需的输出..

有什么想法吗?我知道我做错了什么但我不知道如何......

我知道我可以用

进行迭代
for key in refList:

并比较每个条目并创建一个新列表,但对于大型输入列表,需要很长时间才能完成。

我的Python没有

from collections import OrderedDict

实际列表(显然是不同的名称)附加了我显示的方式的数据..我无法控制它我只有完整的列表。我只在代码中展示了它们在树中的含义。

这就是它的样子

{'Country': ['CHINA', 'CHINA', 'USA', 'USA', 'INDIA'], 'Reps': ['Xuan Fo', 'Chan Li', 'Jhon Dugg', 'Michael Bevan', 'Rahul Kartik']}

我想将它重新排序为(以我的重新优先级)

{'Country': ['INDIA','CHINA', 'CHINA', 'USA', 'USA'], 'Reps': ['Rahul Kartik','Xuan Fo', 'Chan Li', 'Jhon Dugg', 'Michael Bevan']}

1 个答案:

答案 0 :(得分:0)

第一,不要将list用作变量名,因为它是内置函数。我会使用zip函数将您的两个单独列表合并到(重复名称,国家/地区)对列表中。

d = list(zip(l['Reps'], l['Country'])) 

要对列表进行排序,您需要使用refList方法在index中查找国家/地区的位置。

d.sort(key=lambda pair: refList.index(pair[1]))

要转换回两个列表,请使用带有splat运算符的zip:

l['Reps'], l['Country'] = zip(*d)