問題は、リストに辞書が含まれている辞書が含まれていることです。あなたは何とか内部の辞書を取得する必要があります。これは一般に、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}}]
代わりの機能INEあなたも可能性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 ...]
しかし私は個人的にはDataFrame
sの
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}]
も簡単:
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
-function簡単になります(あなたがしてDataFrames
としてpandas
へのアクセス権を持っている単一の辞書やcollections.namedtuple
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
アンパックを使用してレコードを取得することもできます: 'inner_dict、= somedict.values(); return inner_dict ['age'] 'しかし、値が1つしかないと確信する必要があります。 – AChampion