如何合并和格式化列表

时间:2016-03-03 22:40:26

标签: python

我有两个嵌套列表:

l1 = [['a', 'b'], ['d', 'b'], ['b', 'c'], ['a', 'c'], ['c', 'd'], ['b', 'a'], ['d', 'a']]
l2 = [['a', 'alpha'], ['b', 'beta'], ['c', 'gamma'], ['d', 'delta']]

l1完全未排序,但l2按字母顺序排列,如果相关的话。)

基本上我想最终得到另一个这样的列表:

l3 = [['alpha', ['beta', 'gamma']], ['beta', ['alpha', 'gamma'], ['gamma', ['delta']], ['delta', ['alpha']]

所以:合并共享第一个元素的l1中的列表,然后将l1中的所有值替换为l2中的相应值,最后以l3的方式格式化它们{1}}(嵌套列表,例如['beta', 'gamma']按字母顺序排列)。

This question类似于我想要做的但是我无法修改给出的答案以适合我的问题。)

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用词典(a)将字母映射到单词,(b)合并列表。特别是,请查看collections.defaultdict以使其更容易一些。

>>> l1 = [['a', 'b'], ['d', 'b'], ['b', 'c'], ['a', 'c'], ['c', 'd'], ['b', 'a'], ['d', 'a']]
>>> l2 = [['a', 'alpha'], ['b', 'beta'], ['c', 'gamma'], ['d', 'delta']]
>>> d2 = dict(l2)
>>> d3 = collections.defaultdict(list)
>>> for x, y in l1:
...     d3[d2[x]].append(d2[y])
...
>>> d3
defaultdict(<type 'list'>, {'alpha': ['beta', 'gamma'], 
                            'beta': ['gamma', 'alpha'], 
                            'gamma': ['delta'], 
                            'delta': ['beta', 'alpha']})

如果您希望将结果作为排序列表列表,只需从dict获取items

>>> sorted([k, sorted(v)] for k, v in d3.items())
[['alpha', ['beta', 'gamma']],
 ['beta', ['alpha', 'gamma']],
 ['delta', ['alpha', 'beta']],
 ['gamma', ['delta']]]