Python 如何将3个列表转换为有序字典

Python 如何将3个列表转换为有序字典,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,我已经搜索过了,但我找不到任何有效的。。。我希望有人能帮助我 我有3个清单: a = [(1), (7), (3), (1)] b = [(2), (4), (7), (4)] c = [(8), (1), (3), (3)] 然后我想我可以把它们转换成元组: ab = [(1,2), (7,4), (3,7), (1,4)] bc = [(1,2,8), (7,4,1), (3,7,3), (1,4,3)] 然后,我可以最终将其转换为唯一元组的有序dict,其中每个元组的第一个元素是

我已经搜索过了,但我找不到任何有效的。。。我希望有人能帮助我

我有3个清单:

a = [(1), (7), (3), (1)]

b = [(2), (4), (7), (4)]

c = [(8), (1), (3), (3)]
然后我想我可以把它们转换成元组:

ab = [(1,2), (7,4), (3,7), (1,4)]

bc = [(1,2,8), (7,4,1), (3,7,3), (1,4,3)]
然后,我可以最终将其转换为唯一元组的有序
dict
,其中每个元组的第一个元素是键,在重复键的情况下,元组中下一个最大的元素打破了这一关系:

(我不确定,但此代码可能有效):

留给我的是
({1:4,3:7,7:4})

并以某种方式在
bc
中打印匹配项
更清楚地说:

它打印:

1,4,3 # not 1,2,8 as  4 > 2
3,7,3
7,4,1

通过从元组
ab
中获取
(1,4)
,并在
bc
中找到它,然后打印
bc

,您希望保留具有最高秒数元素的元组,以便在压缩列表后重复键,其中键是每个元组的第一个元素,仅进行排序就意味着您可以保留上次看到的/更高的值:

from collections import  OrderedDict

print(list(OrderedDict((sub[0], sub) for sub in sorted(zip(a, b, c))).values()))
[(1, 4, 3), (3, 7, 3), (7, 4, 1)]
排序时:

In [8]: sorted(zip(a, b, c))
Out[8]: [(1, 2, 8), (1, 4, 3), (3, 7, 3), (7, 4, 1)]

您将在列表的后面获得“更高的值”,因此默认情况下,我们将始终保留最大重复键的值。

不确定您的问题实际是什么?请编辑该问题以显示您的预期输出。我刚刚完成了,希望我的编辑有所帮助。在我完成问题之前,我不小心按下了“问”。对不起@为什么数字周围有排列?你应该有一个元素元组还是列表中有什么?还有,
({1:4,3:7,7:4})
是如何产生的呢?你也可以使用这样的东西:
abc=sorted(zip(a,b,c));过滤={a:(a,b,c)用于abc中的(a,b,c)};打印排序(filtered.values())
@mfripp,你可以,但为什么一次排序就可以了?我想我只是喜欢使用内置类型并使用字典理解的想法,我有一种模糊的怀疑,OrderedDict在我添加条目时会对条目进行排序。我应该检查文档,我会发现OrderedDict是在添加条目时按顺序排列的,而不是按字典顺序排列的,因此它不会添加额外的排序。顺便问一下,list(dict.values())与dict.values()是否相同?@mfripp,取决于python版本。values在python3中返回一个dictview对象,因此您需要调用list,所以我只使用它来涵盖这两个场景,谢谢。每天都有新东西要学!
In [8]: sorted(zip(a, b, c))
Out[8]: [(1, 2, 8), (1, 4, 3), (3, 7, 3), (7, 4, 1)]