我是编程新手,我正在做文本挖掘任务。我有一个字典,其中的键作为标记和值,作为数据库中令牌的出现。
dic={'a':48,'b':32,'c':26}
并且我还有一个令牌列表,我正在尝试使用每个令牌的出现创建一个新列表。如果在字典中找不到令牌,则追加0。
my_list=['a','b','d','c','a']
ideal_output=[48,32,0,26,48]
我的原始代码是这样的:
for word in my_list:
for k,v in dic.items():
if word==k:
ideal_output.append(v)
else:
ideal_output.append('0')
但它会产生比我预期更多的整数,我不知道它有什么问题。我很感激你的帮助!
当前输出看起来像这样
['0',48,'0','0','0',32,'0','0','0',26,'0','0','0', 48,'0']
答案 0 :(得分:2)
my_list=['a','b','d','c','a']
ideal_output = [dic.get(token, 0) for token in my_list]
答案 1 :(得分:1)
dic={'a':48,'b':32,'c':26}
my_list=['a','b','d','c','a']
ideal_output=[]
for key in my_list:
if key in dic:
value = dic[key]
ideal_output.append(value)
else:
ideal_output.append(0)
print(ideal_output)
答案 2 :(得分:0)
分步解决方案:
这个答案适合您,也适用于其他难以理解代码的人。对不起,如果它太详细,但它可能对某人有帮助。
首先,我们需要遍历列表,这意味着我们将检查其中的每个元素。我们将使用 for 循环来执行此操作。这将连续检查列表中的每个项目,并将其分配给变量 i 。它将运行它下面的所有代码,当它完成后,它将继续下一个项目,再次分配给我:
for i in my_list:
# Here we'll add more code
现在我们需要确定名为“i”的项目是否在字典中。它是当前由 for 循环检查的元素。
for i in my_list:
if i in dic: #This checks if i is in the dictionary
ideal_output.append(dic[i]) # dic[i] is the value we want to add to
# We use ideal_output.append and the value in the parentheses to add the value
# to the list
现在我们要在列表中添加'0',如果我们放在 if 语句中的条件不满足:
for i in my_list:
if i in dic:
ideal_input.append(dic[i])
else:
ideal_output.append(0)
print(ideal_output) #This runs when the loop is finished
答案 3 :(得分:0)
您可以使用collections.defaultdict
。在下面的示例中,对于找不到的每个键,它将返回0。
In [1]: from collections import defaultdict
In [2]: di = defaultdict(lambda: 0, {'a':48,'b':32,'c':26})
In [3]: di['a']
Out[3]: 48
In [4]: di['x']
Out[4]: 0
In [5]: di['p']
Out[5]: 0
但是,由于您似乎在计算文本中的字母,请查看collections.Counter
。
In [6]: from collections import Counter
In [7]: c = Counter('This is a text')
In [8]: c
Out[8]:
Counter({' ': 3,
'T': 1,
'a': 1,
'e': 1,
'h': 1,
'i': 2,
's': 2,
't': 2,
'x': 1})
答案 4 :(得分:-1)
试试这个,避免第二个for循环:
ideal_output=[]
for element in my_list:
if element in dic.keys():
ideal_output.append(dic[element])
else:
ideal_output.append(0)
print(ideal_output)