首页 > 解决方案 > 在同一循环中使用列表填充 dict

问题描述

我正在尝试用 pandas sereis 中按列出现的字符来填充字典。剧集如下:

>>> jkl
1     ATGC
2     GTCA    
3     CATG
Name: 0, dtype: object

我想要一个包含所有字符作为键的字典,并将它们的按列出现频率列表作为字典的值,如下所示:

{'A':[1,1,0,1],'C':[1,0,1,1],'G':[1,0,1,1],'T':[0,2,1,0]}

我尝试了几个代码,这是其中之一:

mylist = ['A', 'C', 'G','T']
dict = {key: None for key in mylist}
for i,(a,b) in enumerate(zip_longest(jkl[1],dict.keys())):
    t=str(list(jkl.str[i]))
    single_occurrences = Counter(t)    
    kl.append(single_occurrences.get(b))
    dict[b]=kl

但是这个 dict 不包含所需的输出,有解决方案吗?

标签: pythonpython-3.xpandasdictionary

解决方案


crosstab重新创建数据框后使用

S=pd.DataFrame(s.map(list).tolist()).melt()
pd.crosstab(S.value,S.variable)
Out[338]: 
variable  0  1  2  3
value               
A         1  1  0  1
C         1  0  1  1
G         1  0  1  1
T         0  2  1  0

添加后to_dict

pd.crosstab(S.value,S.variable).T.to_dict('l')
Out[342]: {'A': [1, 1, 0, 1], 'C': [1, 0, 1, 1], 'G': [1, 0, 1, 1], 'T': [0, 2, 1, 0]}

推荐阅读