让一个列表根据索引值组合来自另一个列表的元素

时间:2013-10-05 23:23:37

标签: python

我的目标是让一个列表的重复项根据相应的索引值将另一个列表的元素组合在一起,并删除第一个列表的重复项,这样两个列表的索引数仍然相同。

这是我要改变的列表的开头:

X = ['0', '1', '0', '1', '0', '1', '0']
Y = ['a', 'm', 'z', 'G', 'h', 'w', '22']

这是我正在寻找的结果:

X = [0,1]
Y = ['azh22', 'mGw']

顺序也与第二个列表(列表Y)中的组合项无关,只要它们根据列表X中的项目组合在一起。

我仍然是编程的noobie,这个让我难过。 谢谢!

2 个答案:

答案 0 :(得分:5)

您可以使用defaultdict

>>> from collections import defaultdict
>>> d = defaultdict(str)
>>> for i, j in zip(X, Y):
...     d[i] += j
... 
>>> print d
defaultdict(<type 'str'>, {'1': 'mGw', '0': 'azh22'})
>>> print d.items()
[('1', 'mGw'), ('0', 'azh22')]
>>> X = d.keys()
>>> Y = d.values()
>>> print X
['1', '0']
>>> print Y
['mGw', 'azh22']

答案 1 :(得分:1)

将两个列表拼凑在一起:

In [15]: zip(X, Y)
Out[15]:
[('0', 'a'),
 ('1', 'm'),
 ('0', 'z'),
 ('1', 'G'),
 ('0', 'h'),
 ('1', 'w'),
 ('0', '22')]

把它变成字典:

from collections import defaultdict

d = defaultdict(str)

for key, value in zip(X, Y):
    d[key] += value  # If the key doesn't exist, it'll default to an empty string

现在你有了你生成的字典,我认为这比两个列表更容易使用:

{'1': 'mGw', '0': 'azh22'}