我有一些数据(在数组中),我想在另一个字典上排序(优先级) 实施例
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']}
答案 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)