创建具有字符位置及其各自计数的字典
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}
我有多个字符串,例如:
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}