Python:按特定顺序对元组列表进行排序

Python:按特定顺序对元组列表进行排序,python,list,Python,List,我有下面的元组列表,它们可以以多种方式排序。例如,它可以如下所示: data = [ ("name", "Derek Carr"), ("college", "Fresno State"), ("jersey", 4), ("team", "Oakland Raiders") ] data = [ ("college", "Fresno State"), ("jersey", 4), ("name", "

我有下面的元组列表,它们可以以多种方式排序。例如,它可以如下所示:

data = [ ("name", "Derek Carr"),
         ("college", "Fresno State"),
         ("jersey", 4),
         ("team", "Oakland Raiders") ]
data = [ ("college", "Fresno State"),
         ("jersey", 4),
         ("name", "Derek Carr"),
         ("team", "Oakland Raiders") ]
people = [
          [("name", "Derek Carr"),
           ("college", "Fresno State"),
           ("jersey", 4),
           ("team", "Oakland Raiders")],
          [("college", "Fresno State"),
           ("jersey", 4),
           ("name", "Derek Carr"),
           ("team", "Oakland Raiders")]
         ]
或者像这样:

data = [ ("name", "Derek Carr"),
         ("college", "Fresno State"),
         ("jersey", 4),
         ("team", "Oakland Raiders") ]
data = [ ("college", "Fresno State"),
         ("jersey", 4),
         ("name", "Derek Carr"),
         ("team", "Oakland Raiders") ]
people = [
          [("name", "Derek Carr"),
           ("college", "Fresno State"),
           ("jersey", 4),
           ("team", "Oakland Raiders")],
          [("college", "Fresno State"),
           ("jersey", 4),
           ("name", "Derek Carr"),
           ("team", "Oakland Raiders")]
         ]
每次的内容都相同,但元组的顺序不同。如何创建每次都与此完全相同的新列表:

condensed_data = ["Derek Carr", "Oakland_Raiders"]

编辑:(1)数据列表已修复。(2) 这些列表具有不同顺序的原因是它们是从字典构建的。

这里有一个关于如何在python中排序的好入门:

您拥有的
压缩_数据
并没有所有条目?如果希望只获取压缩数据,可能需要尝试列表理解,例如:

condensed_data = sorted([item[1] for item in data if item[1] in ('Derek Carr', 'Oakland Raiders')])

将元组(或dict)的第一部分与
“name”
“team”
进行比较,如果匹配,则将第二部分插入到
压缩数据中。这里什么都不用分类

例如:

res = [None, None]

for tup in data:
    if tup[0] == 'name':
        res[0] = tup[1]
    elif tup[0] == 'team':
        res[1] = tup[1]

>>> print(res)
['Derek Carr', 'Oakland Raiders']

假设您有一个元组列表:

[v for key in ["name", "team"] for k, v in data if k == key]
# ['Derek Carr', 'Oakland Raiders']

也可以使用普通循环:

lst = []
for key in ['name', 'team']:
    for k, v in data:
        if k == key:
            lst.append(v)

lst
# ['Derek Carr', 'Oakland Raiders']

我假设你的意思是你的数据如下:

data = [ ("name", "Derek Carr"),
         ("college", "Fresno State"),
         ("jersey", 4),
         ("team", "Oakland Raiders") ]
data = [ ("college", "Fresno State"),
         ("jersey", 4),
         ("name", "Derek Carr"),
         ("team", "Oakland Raiders") ]
people = [
          [("name", "Derek Carr"),
           ("college", "Fresno State"),
           ("jersey", 4),
           ("team", "Oakland Raiders")],
          [("college", "Fresno State"),
           ("jersey", 4),
           ("name", "Derek Carr"),
           ("team", "Oakland Raiders")]
         ]
也就是说,您有一个列表列表,每个列表都包含有效的元组(您的示例不是有效的Python)

首先,我们要将每个元组列表转换为一个字典,将键映射到值:

data = map(dict, people)
现在,我们可以提取每个人想要的信息:

for p in data:
    p_data = [p["name"], p["team"]]

如果您只想为一个人执行此操作:

data = [("name", "Derek Carr"),
        ("college", "Fresno State"),
        ("jersey", 4),
        ("team", "Oakland Raiders")]
person_data = dict(data)
result = [person_data["name"], person_data["team"]]

您的数据不是有效的python语法……而且,假设您确实有一个元组列表,那么这个问题非常简单。这个问题是否有一个特定的部分让你感到困扰?你能告诉我们你尝试了什么,这样我们就可以找出给你带来麻烦的地方,并希望能解释给你,让你明白(而不是仅仅给你一些你可能不明白的代码?)这正是我想要的。如果不允许我使用列表理解(例如嵌套迭代),我将如何编写此代码?这听起来像是一个奇怪的约束,但您肯定可以从数据编写双循环或构造字典并按键获取值。这不是一个约束。我只是好奇怎么做,但我很难弄明白。但是谢谢你的编辑!我现在明白了。