我有一个名为myList的列表。我想要实现的是,我想根据年龄键的值对列表进行排序。我知道它可以用sort函数完成,但我不知道如何为key编写函数。任何人都可以建议我解决我的问题。
myList = [ {'john':{'age':30 ,'salary':600000}}, {'mullar':{'age':25 ,'salary':250000}},
{'todd':{'age':40 ,'salary':300000}},{'rolex':{'age':20 ,'salary':450000}},
{'ron':{'age':20 ,'salary':500000}},{'gilex':{'age':30 ,'salary':450000}},
{'larrat':{'age':41 ,'salary':350000}},{'fyoid':{'age':24 ,'salary':400000}},
{'devon':{'age':33 ,'salary':600000}},{'dron':{'age':20 ,'salary':200000}}
]
答案 0 :(得分:1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="inputValue"/>
<input type="button" id="btnId" value="submit"/>
<强> RESULT 强>
[{'劳力士':{'年龄':20,'工资':450000}},{'ron':{'年龄':20, 'salary':500000}},{'dron':{'age':20,'salary':200000}},{'fyoid': {'age':24,'salary':400000}},{'mullar':{'age':25,'salary': 250000}},{'john':{'age':30,'salary':600000}},{'gilex':{'age': 30,'薪水':450000}},{'devon':{'age':33,'salary':600000}}, {'todd':{'age':40,'salary':300000}},{'larrat':{'age':41, '薪水':350000}}]
答案 1 :(得分:1)
问题是你的列表包含一个包含字典的字典。你需要以某种方式获得内部字典。这通常通过获取next
项目next(iter(subdict.values()))
来解决。之后获取'age'
值并不复杂,只需使用'age'
索引:
>>> sorted(myList, key=lambda x: next(iter(x.values()))['age'])
[{'rolex': {'age': 20, 'salary': 450000}},
{'ron': {'age': 20, 'salary': 500000}},
{'dron': {'age': 20, 'salary': 200000}},
{'fyoid': {'age': 24, 'salary': 400000}},
{'mullar': {'age': 25, 'salary': 250000}},
{'john': {'age': 30, 'salary': 600000}},
{'gilex': {'age': 30, 'salary': 450000}},
{'devon': {'age': 33, 'salary': 600000}},
{'todd': {'age': 40, 'salary': 300000}},
{'larrat': {'age': 41, 'salary': 350000}}]
而不是lambda
你也可以def
使用函数:
def age(somedict):
inner_dict, = somedict.values() # or inner_dict = next(iter(somedict.values()))
return inner_dict['age']
也适用:
>>> sorted(myList, key=age)
[... same as above ...]
但是,我个人会先将字典弄平(或者单个词典或collections.namedtuple
,或者如果您有权访问pandas
,那么DataFrames
):
myList2 = [{'name': key, 'age': value['age'], 'salary': value['salary']}
for dct in myList
for key, value in dct.items()]
print(myList2)
#[{'age': 30, 'name': 'john', 'salary': 600000},
# {'age': 25, 'name': 'mullar', 'salary': 250000},
# {'age': 40, 'name': 'todd', 'salary': 300000},
# {'age': 20, 'name': 'rolex', 'salary': 450000},
# {'age': 20, 'name': 'ron', 'salary': 500000},
# {'age': 30, 'name': 'gilex', 'salary': 450000},
# {'age': 41, 'name': 'larrat', 'salary': 350000},
# {'age': 24, 'name': 'fyoid', 'salary': 400000},
# {'age': 33, 'name': 'devon', 'salary': 600000},
# {'age': 20, 'name': 'dron', 'salary': 200000}]
简化了key
- 函数:
sorted(myList2, key=lambda x: x['age']) # or operator.itemgetter('age')
[{'age': 20, 'name': 'rolex', 'salary': 450000},
{'age': 20, 'name': 'ron', 'salary': 500000},
{'age': 20, 'name': 'dron', 'salary': 200000},
{'age': 24, 'name': 'fyoid', 'salary': 400000},
{'age': 25, 'name': 'mullar', 'salary': 250000},
{'age': 30, 'name': 'john', 'salary': 600000},
{'age': 30, 'name': 'gilex', 'salary': 450000},
{'age': 33, 'name': 'devon', 'salary': 600000},
{'age': 40, 'name': 'todd', 'salary': 300000},
{'age': 41, 'name': 'larrat', 'salary': 350000}]
使用DataFrame
s更容易:
>>> import pandas as pd
>>> df = pd.DataFrame(myList2)
>>> df.sort_values('age')
age name salary
3 20 rolex 450000
4 20 ron 500000
9 20 dron 200000
7 24 fyoid 400000
1 25 mullar 250000
0 30 john 600000
5 30 gilex 450000
8 33 devon 600000
2 40 todd 300000
6 41 larrat 350000