如何将列表作为字典返回,并放置列表'变量作为字典的值?

时间:2014-10-26 21:16:56

标签: python list dictionary

例如,在比赛中,我有一个跑步者名单及其名称,从他们的位置排序,例如['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]}

(我很难搞清楚这一点。)

谢谢。抱歉改变了输出。非常感谢你!

3 个答案:

答案 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]