使用递增值创建字典

2024-04-26 10:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,我想生成一个字典d,去掉重复项并排除单个项,这样第一个键的值为0,第二个键的值为1,依此类推。在

我写了以下代码:

d = {}
i = 0
for l in a_list:
    if (l not in d) and (l != '<'):
        d[l] = i
        i += 1

如果a_list = ['a', 'b', '<', 'c', 'b', 'd'],则在运行代码d后包含{}。秩序并不重要。 有没有更优雅的方法来获得同样的结果?在


Tags: and方法代码in列表forif字典
3条回答

使用dict.fromkeys获得您不需要的唯一值,然后使用.update来应用序列,例如:

a_list = ['a', 'b', '<', 'c', 'b', 'd']

d = dict.fromkeys(el for el in a_list if el != '<')
d.update((k, i) for i, k in enumerate(d))

给你:

^{pr2}$

如果顺序很重要,那么使用collections.OrderedDict.fromkeys保留原始值的顺序,或者如果应该按字母顺序对唯一值进行排序。在

{b: a for a, b in enumerate(set(a_list) - {'<'})}

set(a_list)a_list创建一个集合。 它有效地去除a_list中的重复数字,因为set只能包含唯一值。在

这里需要的是ordereddict并手动筛选列表:

from collections import OrderedDict

d = OrderedDict()

new_list = []

a_list = [1,3,2,3,2,1,3,2,3,1]

for i in a_list:
    if i not in new_list:
        new_list.append(i)

for i, a in enumerate(new_list):
    if a != "<":
       d[i] = a

输出:

^{pr2}$

如果原始订单不重要:

final_d = {i:a for i, a in enumerate(set(a_list)) if a != "<"}

相关问题 更多 >