所以我有一个字符串列表,我想转换一个字典。我想要字典中的键的名称字符串和…另一部分……我忘记它叫什么,钥匙后,部分字符串出现的次数,这是一个大程序的一部分所以我不会提交我迄今为止所有的代码,但是我想转换列表如下(有几个其他列表以及图我可以但是我可能只是更改代码以适应):s2ID = ['a01','a02','a02','a02','a03','a03','a03','a03')我不知道有多少元素将在最终版本的列表,这些只是值我一定不好过,我有事情要处理,所以请记住,我不会necissarily a01和2 a02的最终版本,我也可以有a75据我所知,我所知道的是,他们将遵循的格式(int) (int),不知道这会影响代码或不但是以防任何帮助将不胜感激作为一个解释(即使它用一种快速而简单的一个)的任何代码。提前感谢你的帮助!
# 回答1 内置函数,方法和关键字,可以用来完成上图:为如果在词典的方法has_key (),setdefault (),或get ()
# 回答2 听起来像一个课本的例子为默认的字典!看到在这里.下面是一个交互式会话:
- >>> from collections import defaultdict
- >>> d=defaultdict(int)
- >>> s2ID = ['a01', 'a02', 'a02', 'a02', 'a03', 'a03', 'a03', 'a03']
- >>> for k in s2ID:
- d[k]+=1
- >>> d
- defaultdict(<type 'int'>, {'a02': 3, 'a03': 4, 'a01': 1})
- >>>
设置的int defaultdict意味着如果提到的项目不存在,你只是做一个整数(0)价值。
# 回答3 另外:
- >>> import operator
- >>> keys, d = range(len(s2ID)), {}
- >>> map(operator.setitem, [d]*len(keys), keys, s2ID)
- >>> print d
- {0: 'a01', 1: 'a02', 2: 'a02', 3: 'a02', 4: 'a03', 5: 'a03', 6: 'a03', 7: 'a03'}
# 回答4 我更喜欢这种方式:
- >>> s2ID = ['a01', 'a02', 'a02', 'a02', 'a03', 'a03', 'a03', 'a03']
- >>> dd = {}
- >>> for s in s2ID:
- ... v = dd.setdefault(s, 0)
- ... dd[s] = v+1
- ...
- >>> dd
- {'a02': 3, 'a03': 4, 'a01': 1}
- >>>
# 回答5 @bvdet我认为这是有趣的提供另一个提示如何创建dict类型从一个列表中(考虑到列表值)。你的解决方案是完全正确的。得到相同的答案,我会:
- >>> d = dict(zip(set(s2ID), map(lambda x: s2ID.count(x), set(s2ID))))
- >>> print d
- {'a02': 3, 'a03': 4, 'a01': 1}
-
事实上,我不使用list.setdefault(),因为我从来没有学过如何使用它。事实上,我的代码可能会比你的低效率。
# 回答6 @papin有趣的是看到其他的解决方案。谢谢你的贡献。