Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用键对列表中的多个dict进行排序(google babyname练习\u修改)_Python - Fatal编程技术网

Python 如何使用键对列表中的多个dict进行排序(google babyname练习\u修改)

Python 如何使用键对列表中的多个dict进行排序(google babyname练习\u修改),python,Python,这是我从GoogleBabyName练习中创建的一个修改列表 [ [{'year': 1998}, {'rank': 1, 'boy': 'pic', 'girl': 'Emy'}, {'rank': 2, 'boy': 'badf', 'girl': 'Hdf'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 'Sky'}], [{'year': 1999}, {'rank': 1, 'boy': 'xic', 'girl': 'Ely'}, {'ran

这是我从GoogleBabyName练习中创建的一个修改列表

[
[{'year': 1998}, {'rank': 1, 'boy': 'pic', 'girl': 'Emy'}, {'rank': 2, 
'boy': 'badf', 'girl': 'Hdf'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}],
[{'year': 1999}, {'rank': 1, 'boy': 'xic', 'girl': 'Ely'}, {'rank': 2, 
'boy': 'aacb', 'girl': 'Hah'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}],
[{'year': 1958}, {'rank': 1, 'boy': 'Mic', 'girl': 'Emy'}, {'rank': 2, 
'boy': 'caob', 'girl': 'Han'}, ...{'rank': 1000, 'boy': 'Jal', 'girl': 
'Sky'}],
 ....
]

如何使用不同的键对列表进行排序?例如年份、等级……

我将列表dict转换为
pandas DataFrame
,这使得
排序变得更容易

LIST=[[{'year': 1998}, {'rank': 1, 'boy': 'pic', 'girl': 'Emy'}, {'rank': 2,
'boy': 'badf', 'girl': 'Hdf'},{'rank': 1000, 'boy': 'Jal', 'girl':
'Sky'}],
[{'year': 1999}, {'rank': 1, 'boy': 'xic', 'girl': 'Ely'}, {'rank': 2,
'boy': 'aacb', 'girl': 'Hah'},{'rank': 1000, 'boy': 'Jal', 'girl':
'Sky'}],
[{'year': 1958}, {'rank': 1, 'boy': 'Mic', 'girl': 'Emy'}, {'rank': 2,'boy': 'caob', 'girl': 'Han'},{'rank': 1000, 'boy': 'Jal', 'girl':'Sky'}]]
DFLIST=[]
for A in LIST:
    DFLIST.append(pd.DataFrame(A).ffill().dropna())
NEWDF=pd.concat(DFLIST,axis=0).reset_index(drop=True)

Out[540]: 
    boy girl    rank    year
0   pic  Emy     1.0  1998.0
1  badf  Hdf     2.0  1998.0
2   Jal  Sky  1000.0  1998.0
3   xic  Ely     1.0  1999.0
4  aacb  Hah     2.0  1999.0
5   Jal  Sky  1000.0  1999.0
6   Mic  Emy     1.0  1958.0
7  caob  Han     2.0  1958.0
8   Jal  Sky  1000.0  1958.0
例如:按等级排序

NEWDF.sort_values(['year','rank'],ascending=[True,False])


Out[542]: 
    boy girl    rank    year
8   Jal  Sky  1000.0  1958.0
7  caob  Han     2.0  1958.0
6   Mic  Emy     1.0  1958.0
2   Jal  Sky  1000.0  1998.0
1  badf  Hdf     2.0  1998.0
0   pic  Emy     1.0  1998.0
5   Jal  Sky  1000.0  1999.0
4  aacb  Hah     2.0  1999.0
3   xic  Ely     1.0  1999.0

这些数据的结构很糟糕。按年份排序的方法与按等级、男孩等排序的方法有点不同。您尝试过什么?我支持COLDSPEED所说的——这些数据的结构可以更好。欢迎来到StackOverflow。请注意,您应该已经研究过您的问题,并在发布之前尝试解决它。如果您有一个特定的问题,它应该包括您到目前为止尝试过的内容的详细信息以及一个文档中的相关代码。请阅读并@COLDSPEED谢谢。您对数据结构有什么建议吗?@XiaoboLi将您的数据结构更改为
Dataframe
Brilliant!回答得好。@Wen非常感谢。