我有一个列表,我想生成一个字典d,取出重复项并排除单个项目,这样第一个键的值为0,第二个键的值为1,依此类推.
我写了以下代码:
d = {}
i = 0
for l in a_list:
if (l not in d) and (l != '<'):
d[l] = i
i += 1
Run Code Online (Sandbox Code Playgroud)
如果a_list = ['a', 'b', '<', 'c', 'b', 'd'],运行代码后d包含{'a': 0, 'b': 1, 'c': 2, 'd':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))
Run Code Online (Sandbox Code Playgroud)
给你:
{'a': 0, 'b': 1, 'd': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
如果顺序很重要,则使用collections.OrderedDict.fromkeys保留原始值的顺序,或者如果它们应该按字母顺序排序,则对唯一值进行排序.
{b: a for a, b in enumerate(set(a_list) - {'<'})}
Run Code Online (Sandbox Code Playgroud)
set(a_list)从 中创建一个集合a_list。这有效地去除了 中的重复数字a_list,因为 aset只能包含唯一值。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |