我有以下可以以各种方式订购的元组列表。例如,它看起来像这样:
data = [ ("name", "Derek Carr"),
("college", "Fresno State"),
("jersey", 4),
("team", "Oakland Raiders") ]
或者像这样:
data = [ ("college", "Fresno State"),
("jersey", 4),
("name", "Derek Carr"),
("team", "Oakland Raiders") ]
每次内容都相同,但元组的顺序不同。我怎样才能创建一个看起来完全像这样的新列表:
condensed_data = ["Derek Carr", "Oakland_Raiders"]
编辑:(1)数据列表已修复。 (2)这些列表具有不同顺序的原因是因为它们是由字典构成的
答案 0 :(得分:2)
我假设你的意思是你的数据是这样的:
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"]]
答案 1 :(得分:1)
假设你有一个元组列表:
[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']
答案 2 :(得分:0)
这是一篇关于如何在python中进行排序的好的入门书:https://wiki.python.org/moin/HowTo/Sorting。
你拥有的condensed_data
没有所有条目?如果您只想获得精简数据,可能需要尝试列表推导,例如:
condensed_data = sorted([item[1] for item in data if item[1] in ('Derek Carr', 'Oakland Raiders')])
答案 3 :(得分:0)
您将元组(或字典)的第一部分与"name"
和"team"
进行比较,如果匹配,则将第二部分插入condensed_data
。无需在此处进行任何排序。
例如:
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']