我已经搜索了但我找不到任何可行的东西......我希望有人可以帮助我。
我有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
个唯一元组,其中每个元组的第一个元素是键,在重复键的情况下,元组中的下一个最大元素打破了这个领带:
(我不确定,但这段代码可能有用):
print(dict(sorted(ab, key=lambda x: (x[0], x[1]))))
留下({1:4, 3:7, 7:4})
并以某种方式在bc
打印匹配
为了更清楚:
打印:
1,4,3 # not 1,2,8 as 4 > 2
3,7,3
7,4,1
从元组(1,4)
获取ab
并在bc
中找到它,然后打印bc
。
答案 0 :(得分:1)
你希望保持元组具有最高的第二个元素来重复键,其中键是压缩列表后每个元组的第一个元素,只是排序意味着你保持最后看到/更高的值:
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)]
您会在列表中稍后获得“更高的值”,因此默认情况下,我们将始终保留重复键的值,这是最大的。