创建具有字符位置及其各自计数的字典

Create Dictionary With Position of Character and its Respective Count

我有多个字符串,例如:

0000NNN
000ANNN

我想得到一个字典,以字符在每个字符串中的位置为键,以0的个数为值(如果字符不为0,可以忽略)。所以对于上面的字符串,输出将是:

1:2
2:2
3:2
4:1
5:0
6:0
7:0

到目前为止我试过这个:

ctr=1
my_dict={}
for word in string_list:
    for letter in word:
        if letter == "0":
            if ctr not in my_dict.keys():
                my_dict[ctr]=1
            else:
                my_dict[ctr]+=1
        else:
            pass        
print(my_dict)  

输出不正确,我做错了什么?

以下内容应该会为您指明正确的方向:

strings = ["0000NNN", "000ANNN"]

d = {i+1: sum(s[6-i] != "0" for s in strings) for i in range(7)}
# {1: 2, 2: 2, 3: 2, 4: 1, 5: 0, 6: 0, 7: 0}

一般情况下,6 六个是 length-1

看起来你从来没有增加和重置 ctr 而不是为 5、6、7 添加 my_dict[ctr]=0。这样的事情应该有效:

string_list = ['0000NNN','000ANNN']

my_dict={}
for word in string_list:
    ctr=1 #Moved
    for letter in word:
        if letter == "0":
            if ctr not in my_dict.keys():
                my_dict[ctr]=1
            else:
                my_dict[ctr]+=1
        else:
            my_dict[ctr]=0 #Added
        ctr+=1 #Added
print(my_dict)  #{1: 2, 2: 2, 3: 2, 4: 0, 5: 0, 6: 0, 7: 0}

您可以通过以下方式使用collections.Counter

>>> Counter(i for string in strings for i, c in enumerate(string, start=1) if c == '0')
Counter({1: 2, 2: 2, 3: 2, 4: 1})

您没有增加点击率,所以总是点击率 == 1。但是,仅此一项不会让你得到你想要的。现在,您正在计算所有单词中的所有“0”并将它们存储在字典键“1”中。

相反,您想分别跟踪位置和计数。

my_dict = {}
for pos in range(7):  # assuming your "words" are the same length - 7 chars
  my_dict[pos] = 0
  for word in string_list:
    if word[pos] == '0':
      my_dict[pos] += 1

你可以这样使用zip()

s = ["0000NNN", "000ANNN"]
d = {}
for i,v in enumerate(zip(s[0], s[1]),1):
    d[i] = v.count('0')

print(d)
{1: 2, 2: 2, 3: 2, 4: 1, 5: 0, 6: 0, 7: 0}