我有一个这样的清单:
a = ['a', 'b', 'a', 'c', 'b']
b = [0, 1, 2, 3, 4]
我想要的是:
a = 0, 2
b = 1, 4
c = 3
我花了大约一个小时试图通过玩zip()来做到这一点但是没有用。怎么办呢?
答案 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]})
希望这会有所帮助:)