Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表与词典理解_Python_List Comprehension_Dictionary Comprehension - Fatal编程技术网

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…我只是想提高我对理解的理解。干得好,克里斯,谢谢你,也是一个很好的解决方案,也许更容易理解