【问题标题】:Create Dictionary With Position of Character and its Respective Count创建具有字符位置及其相应计数的字典
【发布时间】:2021-08-09 11:09:07
【问题描述】:

我有多个字符串,例如:

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)  

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

【问题讨论】:

  • 字符串是否保证长度相同?
  • @Durtal 是的,总是相同的长度

标签: python python-3.x etl


【解决方案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}

【讨论】:

    【解决方案2】:

    您可以通过以下方式使用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})
    

    【讨论】:

      【解决方案3】:

      你没有增加 ctr,所以 ctr == 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
      

      【讨论】:

        【解决方案4】:

        你可以像这样使用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}
        

        【讨论】:

          【解决方案5】:

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

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-12-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-03
            • 1970-01-01
            相关资源
            最近更新 更多