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'] 另一个例子:

我有这些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 = [('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']