Python 从列表中调整相同的排序顺序
我有一个包含数字的列表和一个包含用户的列表。第一个列表的第一个元素属于第二个列表的第一个元素,依此类推。然后,我想使用Python 从列表中调整相同的排序顺序,python,list,Python,List,我有一个包含数字的列表和一个包含用户的列表。第一个列表的第一个元素属于第二个列表的第一个元素,依此类推。然后,我想使用sort()对数字列表进行排序,并希望用户名仍然与以前的数字匹配 发件人: 致: 我建议将您的值分组到元组列表或字典列表中: 数据=[ ('max',9), ('david',3), (“弗雷迪”,10岁) ] 然后您可以使用对该列表进行排序: data.sort(key=lambda x:x[1]) 通过这种方式,您的数据以保持其关系的方式存储 要改为使用词典,需要进行以下
sort()
对数字列表进行排序,并希望用户名仍然与以前的数字匹配
发件人:
致:
我建议将您的值分组到元组列表或字典列表中:
数据=[
('max',9),
('david',3),
(“弗雷迪”,10岁)
]
然后您可以使用对该列表进行排序:
data.sort(key=lambda x:x[1])
通过这种方式,您的数据以保持其关系的方式存储
要改为使用词典,需要进行以下简单更改:
数据=[
{'name':'max','number':9},
{'name':'david','number':3},
{'name':'freddy','number':10}
]
然后将排序代码更改为
data.sort(key=lambda x:x['number'])
您可以使用和:
您可以将两者压缩到一个列表中,根据编号进行排序,然后将其解压缩:
users=[“max”、“david”、“freddy”]
数字=[9,3,10]
zipped=sorted(zip(数字、用户),key=lambda x:x[0])
数字,用户=zip(*压缩)
您可以尝试使用字典查找用户编号和用户名
users = ["max", "david", "freddy"]
numbers = [9, 3, 10]
dictionary = {users[i]: numbers[i] for i in range(len(numbers))}
{'max': 9, 'david': 3, 'freddy': 10}
然后对字典进行排序并转换回列表\ 使用zip和map的正确组合,您可以在一行中完成此操作:
users = ["max", "david", "freddy"]
numbers = [9, 3, 10]
numbers,users = map(list,zip(*sorted(zip(numbers,users))))
print(users) # ['david', 'max', 'freddy']
print(numbers) # [3, 9, 10]
为什么不使用dict(键值对)将这些数字映射到用户?这是否回答了您的问题?不需要
lambda
。默认情况下,它将首先按第一个元素排序。如果为True,则将其删除
>>> users = ["max", "david", "Freddy"]
>>> numbers = [9, 3, 10]
>>> sorted_users = [u for _, u in sorted(zip(numbers, users)]
>>> sorted_users
['david', 'max', 'freddy']
users = ["max", "david", "freddy"]
numbers = [9, 3, 10]
dictionary = {users[i]: numbers[i] for i in range(len(numbers))}
{'max': 9, 'david': 3, 'freddy': 10}
users = ["max", "david", "freddy"]
numbers = [9, 3, 10]
numbers,users = map(list,zip(*sorted(zip(numbers,users))))
print(users) # ['david', 'max', 'freddy']
print(numbers) # [3, 9, 10]