按以下格式在python中隐藏此列表

时间:2013-11-18 06:25:00

标签: python

我有一个这样的清单:

a = ['a', 'b', 'a', 'c', 'b']
b = [0, 1, 2, 3, 4]

我想要的是:

a = 0, 2
b = 1, 4
c = 3

我花了大约一个小时试图通过玩zip()来做到这一点但是没有用。怎么办呢?

3 个答案:

答案 0 :(得分:6)

a = ['a', 'b', 'a', 'c', 'b']
b = [0, 1, 2, 3, 4]
from collections import defaultdict
result = defaultdict(list)
for idx, item in zip(b, a):
    result[item].append(idx)
print result

<强>输出

defaultdict(<type 'list'>, {'a': [0, 2], 'c': [3], 'b': [1, 4]})

如果b始终是索引列表,您只需使用enumerate

即可
a = ['a', 'b', 'a', 'c', 'b']
from collections import defaultdict
result = defaultdict(list)
for idx, item in enumerate(a):
    result[item].append(idx)
print result

答案 1 :(得分:3)

将列表理解与zip一起使用:

>>> [i for x, i in zip(a, b) if x == 'a']
[0, 2]
>>> [i for x, i in zip(a, b) if x == 'b']
[1, 4]
>>> [i for x, i in zip(a, b) if x == 'c']
[3]

或使用enumerate

>>> [i for i, x in enumerate(a) if x == 'a']
[0, 2]

答案 2 :(得分:0)

如果您的列表b始终是索引,您可以这样做......

代码:

d={}
a = ['a', 'b', 'a', 'c', 'b']


for item in set(a):
    d[item] = [i for i,val in enumerate(a) if val==item]

print d  

输出

{'a': [0, 2], 'c': [3], 'b': [1, 4]}  

如果不是你的列表b是索引,那么同样可以完成......

代码:

from collections import defaultdict
a = ['a', 'b', 'a', 'c', 'b']
b = [0, 1, 2, 3, 4]

d= defaultdict(list)
for (p,q) in zip(a,b):
    d[p].append(q)

print d  

输出

defaultdict(<type 'list'>, {'a': [0, 2], 'c': [3], 'b': [1, 4]})  

希望这会有所帮助:)