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

时间:2016-02-22 18:19:58

标签: 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个唯一元组,其中每个元组的第一个元素是键,在重复键的情况下,元组中的下一个最大元素打破了这个领带:

(我不确定,但这段代码可能有用):

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

1 个答案:

答案 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)]

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