Python列表与词典理解
我正试着习惯于列出字典。这里有一个小代码我一直无法转换Python列表与词典理解,python,list-comprehension,dictionary-comprehension,Python,List Comprehension,Dictionary Comprehension,我正试着习惯于列出字典。这里有一个小代码我一直无法转换 lst = ['C', 'A', 'B', 'A'] myd = {} for v, k in enumerate(lst): if k in myd: myd[k].append(v) else: myd[k] = [v] print(myd) >>> {'C': [0], 'A': [1, 3], 'B': [2]} 我希望能得到一些帮助。以下是答案,尽管我认为非理
lst = ['C', 'A', 'B', 'A']
myd = {}
for v, k in enumerate(lst):
if k in myd:
myd[k].append(v)
else:
myd[k] = [v]
print(myd)
>>> {'C': [0], 'A': [1, 3], 'B': [2]}
我希望能得到一些帮助。以下是答案,尽管我认为非理解方法更容易理解。如前所述,这一点都不有效 我会和你在一起
{k:[i for i, j in enumerate(lst) if j == k] for k in set(lst)}
一个有助手记录的黑客,但至少是线性时间
>>> {k: d.setdefault(k, []).append(i) or d[k]
for d in [{}]
for i, k in enumerate(lst)}
{'C': [0], 'A': [1, 3], 'B': [2]}
一种变体:
>>> {k: d.setdefault(k, [i])
for d in [{}]
for i, k in enumerate(lst)
if k not in d or d[k].append(i)}
{'C': [0], 'A': [1, 3], 'B': [2]}
好吧,你不能把它用于字典理解,因为它非常可读,你想要的输出到底是什么?想要的输出:{'C':[0],'a':[1,3],'B':[2]}这很糟糕,这是O(n^2),而且可能更难读取循环版本,这很可怕。重要的是,这是二次时间vs线性时间的简单方法,比这更好的是排序和使用itertools.groupby…我只是想提高我对理解的理解。干得好,克里斯,谢谢你,也是一个很好的解决方案,也许更容易理解