例如,在比赛中,我有一个跑步者名单及其名称,从他们的位置排序,例如['Bob', 'Charlie', 'Sarah', 'Alex', 'Bob']
我想用这个列表创建一个字典,比如
{'Bob': [0, 4], 'Charlie': [1], 'Sarah': [2], 'Alex': [3]}
如果你只需要创建一个字典,其中列表变量作为字典键,列表变量的位置作为字典值,你会怎么做?
[A, B, C, A] -> {A: [0, 3] B: [1], C:[2]}
(我很难搞清楚这一点。)
谢谢。抱歉改变了输出。非常感谢你!
答案 0 :(得分:3)
您可以使用enumerate()
。这将遍历列表,为您提供当前元素和该元素的索引。
my_list = ['Bob', 'Charlie', 'Sarah']
my_dict = {}
for index, name in enumerate(my_list):
my_dict[name] = index
编辑:由于OP已经改变。
要准确获得您的要求,您可以使用defaultdict
。这将创建dict
并指定您希望默认值的内容。因此,如果您要访问尚不存在的密钥,则会自动添加一个空列表作为值。这样您就可以执行以下操作:
from collections import defualtdict
my_list = ['Bob', 'Charlie', 'Sarah', 'Bob']
my_dict = defaultdict(list)
for index, name in enumerate(my_list):
my_dict[name].append(index)
答案 1 :(得分:0)
您可以使用enumerate()
和itertools.groupby()
:
>>> your_list=['A','B','C','C','A','A','B','D']
>>> l=[(j,i) for i,j in enumerate(your_list,1)]
>>> l
[('A', 1), ('B', 2), ('C', 3), ('C', 4), ('A', 5), ('A', 6), ('B', 7), ('D', 8)]
>>> g=[list(g) for k, g in groupby(sorted(l),itemgetter(0))]
>>> g
[[('A', 1), ('A', 5), ('A', 6)], [('B', 2), ('B', 7)], [('C', 3), ('C', 4)], [('D', 8)]]
>>> z=[zip(*i) for i in g]
>>> z
[[('A', 'A', 'A'), (1, 5, 6)], [('B', 'B'), (2, 7)], [('C', 'C'), (3, 4)], [('D',), (8,)]]
>>> {i[0]:j for i,j in z}
{'A': (1, 5, 6), 'C': (3, 4), 'B': (2, 7), 'D': (8,)}
答案 2 :(得分:0)
如何通过一个简单的循环来获得所需的结果:
x = ['Bob', 'Charlie', 'Sarah', 'Alex', 'Bob']
y = {}
for i, name in enumerate(x):
if name in y.keys():
y[name].append(i)
else:
y[name] = [i]