Python 列表和字典理解
Python list and 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]}
我很乐意得到一些帮助。
这是答案,尽管我认为非理解方法更容易理解。如前所述,这至少没有效率。
我会留在你所拥有的。
{k:[i for i, j in enumerate(lst) if j == k] for k in set(lst)}
一个 hack with helper dict,但至少它是线性时间。
>>> {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]}
我正在尝试使用列表词典理解。这里有一小段代码我没能转化。
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)}
一个 hack with helper dict,但至少它是线性时间。
>>> {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]}