Python用最高优先级列表替换元组列表中的元组
我有这些python列表:Python用最高优先级列表替换元组列表中的元组,python,list,sorting,tuples,Python,List,Sorting,Tuples,我有这些python列表: x = [('D', 'F'), ('A', 'D'), ('B', 'G'), ('B', 'C'), ('A', 'B')] priority_list = ['A', 'B', 'C', 'D', 'F', 'G'] # Ordered from highest to lowest priority 对于列表中的每个元组,如何根据priority\u list保持具有最高优先级的值?结果将是: ['D', 'A', 'B', 'B', 'A'] 另一个例子:
x = [('D', 'F'), ('A', 'D'), ('B', 'G'), ('B', 'C'), ('A', 'B')]
priority_list = ['A', 'B', 'C', 'D', 'F', 'G'] # Ordered from highest to lowest priority
对于列表中的每个元组,如何根据priority\u list
保持具有最高优先级的值?结果将是:
['D', 'A', 'B', 'B', 'A']
另一个例子:
x = [('B', 'D'), ('E', 'A'), ('B', 'A'), ('D', 'F'), ('E', 'C')]
priority_list = ['A', 'B', 'C', 'D', 'E', 'F']
# Result:
['B', 'A', 'A', 'D', 'C']
x = [('B', 'C'), ('F', 'E'), ('B', 'A'), ('D', 'F'), ('E', 'C')]
priority_list = ['F', 'E', 'D', 'C', 'B', 'A'] # Notice the change in priorities
# Result:
['C', 'F', 'B', 'F', 'E']
提前谢谢,我可能把事情复杂化了。你可以试试:
def get_priority_val(data, priority_list):
for single_val in priority_list:
if single_val in data:
return single_val
x = [('D', 'F'), ('A', 'D'), ('B', 'G'), ('B', 'C'), ('A', 'B')]
priority_list = ['A', 'B', 'C', 'D', 'F', 'G']
final_data = []
for data in x:
final_data.append(get_priority_val(data, priority_list))
print(final_data)
输出:
['D', 'A', 'B', 'B', 'A']
你可以试试
[sorted(i, key=priority_list.index)[0] for i in x]
但是,如果您发现优先级列表中没有值,它将引发异常。您可以使用列表在一行中执行此操作:
[y[0] if priority_list.index(y[0]) < priority_list.index(y[1]) else y[1] for y in x]
您可以尝试使用列表理解:
ans = [d[0] if priority_list.index(d[0]) < priority_list.index(d[1] ) else d[1] for d in x ]
您可以创建一个包含优先级值的dict,只需将
min
与自定义键一起使用即可
>>> priority_dict = {k:i for i,k in enumerate(priority_list)}
>>> [min(t, key=priority_dict.get) for t in x]
['D', 'A', 'B', 'B', 'A']
澄清您的逻辑,以及预期结果是如何组成的?看起来您只是从每个元组中获取第一个值,在这种情况下,map和operator.itemgetter将起作用,或者是一个非常简单的列表理解示例数据具有误导性。我们甚至不需要这里的
优先级列表。只要取每个元组的第一个元素。。。它已经吸引了很多答案,但我们不知道真正的测试cases@Waroulolz:x=[('D','F'),('A','D'),('B','G'),('B','C'),('B','A')]的输出是什么?可以添加更多元组以使其更清晰吗?sorted(…,key=…)[0]
可以替换为min(…,key=…)
['D', 'A', 'B', 'B', 'A']
>>> priority_dict = {k:i for i,k in enumerate(priority_list)}
>>> [min(t, key=priority_dict.get) for t in x]
['D', 'A', 'B', 'B', 'A']