我有两个字典。第一个看起来像这样:
{'15': ['monter', 'boulangerie'], '44': ['être', 'méchant'], '45': ['haïr', 'Foret', 'enchanter', 'être', 'beau', 'mille', 'faux', 'jeune', 'fille', 'être', 'asseoir', 'bor', 'mer'], '47': ['comprendre', 'vie', 'perdre', 'aide', 'stp', 'maman', 'perdre', 'être', 'seul', 'ami', 'aimer']}
第二本是一本字典,其中包含单词作为关键字,而分数作为值:
values = Positive_score, Neutral_score, Negative_Score
{"beau": ['1', '3', '2'], 'seul': ['0', '1', '2'], 'cité des loups': ['230', '63', '48'], 'pavage mosaïque': ['296', '108', '0'], "répression de toute forme d'opposition": ['0', '3', '2'], 'en prendre pour': ['0', '81', '260'], 'Walt Disney Records': ['2', '3', '1'], 'paraombilical': ['3', '1', '2'], 'Eugênio': ['32', '85', '0'], 'laissant': ['0', '1', '1'], 'Baudouin de Champagne': ['2', '4', '2'], 'loi Goblet': ['3', '2', '1'], 'jeune': ['290', '49', '81'], 'Guezer': ['91', '44', '29'], "aimer": ['134', '48', '0'], 'marque de produit de luxe': ['21', '28', '2'], 'Zostérops de Woodford': ['18', '38', '0'], 'Henry Ludwell Moore': ['3', '7', '0'], 'Charlyne>prénom': ['23', '28', '0'], 'famille Masreliez': ['5', '4', '2'], 'canadienne-américaine': ['10', '3', '0'], 'bédéguar': ['63', '292', '0'], 'prix Lalande': ['2', '3', '1'], 'rapiécetais': ['2', '2', '0'], 'Maysoon': ['0', '30', '0'], 'hospice civil': ['265', '51', '50'], 'soutirer à': ['0', '6', '11'], 'faux': ['18', '21', '0'], "l'homme amphibie": ['2', '2', '1'], 'Johnny Ryan': ['5', '2', '0'], 'marcher des épaules': ['83', '85', '60'], 'faire lit à part': ['5', '5', '2'], 'Fonteny': ['4', '3', '0'], 'effet boomerang': ['96', '92', '70'], 'Guy Tirolien': ['0', '3', '0'], 'Mans-Les': ['5', '2', '0'], 'Stuart Jacques Ier': ['19', '331', '0'], 'Jupiter II': ['26', '33', '18'], 'Reuth bei Erbendorf': ['0', '10', '2'], 'couronne perlée du gland': ['1', '3', '3'], 'Wikipédia en Arabe bédouin': ['1', '2', '1'], 'Karen Karapetian': ['3', '3', '0'], 'trois mille cinq cents': ['307', '93', '0'], 'charge familiale': ['200', '68', '78'], 'Neuville-Saint-Rémy': ['0', '19', '0'], 'méchant': ['0', '25', '79'], 'modèle de simulation numérique': ['187', '111', '45'], 'Akrotiri': ['0', '313', '23']}
从这两个字典中,我想创建第三个字典,其中将包含第一个字典的键,并且值将是列表单词中所有单词的正,中性和负分数之和,所以我将得到像这样:
如果没有找到任何单词,我会记住该分数所指的键,我仍然会将该键添加到字典中,但值必须为000:
预期结果
{'15'; ['0', '0' , '0'], ['44': ['0', '25', '79'], '45': ['309','73','83'], '47': ['0','1','2']}
我的下面的代码:
dico_phrases = {}
for k, v in d_filtered_words: # regarde la liste
for j in v: # regarde les élements de la liste intérieure
triplet = dico_lexique.get(j,-1)
if triplet != -1:
# Ici nous créons notre dictionnaire finale
if dico_phrases.get(repr(v)): # regarde si la cléi existe dans le dictionnaire
#si oui nous ajoutons les valeurs du dictionnaire.
#repr est utilisépour utiliser la liste comme cléde dictionnaire
t = [int(a) + int(b) for a,b in zip(dico_phrases[repr(v)] ,dico_lexique[j])] # zip prend un élement à un temps donnédans chaque
# Ajout élement et storage dans la liste
dico_phrases[repr(v)] = t #ajoute la liste au dictionnaire
else:
dico_phrases[repr(v)] = dico_lexique[j] # si la valeur n'existe pas , on garde juste le dico
# print le dico final
print(dico_phrases)
但是结果不是我所期望的:键与原始字典的键不对应,也没有分数,因为我手动检查它是否为真。
{"'5'": [784, 222, 0], "'4'": ['381', '121', '0'], "'7'": ['378', '172', '0']}
我也想像这样在csv文件中写入值,但要包含其他列:
id;d_tag;d_lemma;Positive_score;Neutral_score;Negative_score
15;##;##;0;0;0
44;##;##;0;25;79
45;##;##;309;73;83
47;##;##;0;1;2
我的代码:
dicts = d_verbatim, d_tag, d_lemma, d_filtered_words, d_score
with open('my_data.csv', 'w') as ofile:
writer = csv.writer(ofile, delimiter=';')
writer.writerow(['id', 'd_verbatim', 'd_tag', 'd_lemma', 'd_filtered_words', 'Positive Score', 'Neutral Score', 'Negative Score'])
for key in d_verbatim.keys():
writer.writerow([key] + [d[key] for d in dicts])
答案 0 :(得分:2)
import numpy as np
import pandas as pd
# i used these names for the dictionaries to not get confused
number_dict = {'15': ['monter', 'boulangerie'], ... }
score_dict = {"beau": ['1', '3', '2'], ... }
# initialise output
out_dict = {}
for number_entry in number_dict:
score_keys = number_dict.get(number_entry)
# intialise scores
temp_score = np.zeros((1,3))
for score_key in score_keys:
# if there is an entry for that word, add its scores to the temp scores
if score_dict.get(score_key):
temp_score += np.array(score_dict.get(score_key), dtype=np.int32)
# assign temp scores to output dictionary
out_dict[int(number_entry)] = [a for a in temp_score.ravel()]
# convert to dataframe, transpose and rename columns
df = pd.DataFrame(out_dict)
df = df.T
df.columns = ['Positive_score', 'Neutral_score', 'Negative_score']
filename = 'filename.csv'
# save to csv with ';' as separator
df.to_csv(filename, sep=';')
答案 1 :(得分:2)
假设d1
和d2
是您的词典,并且您不介意使用Pandas,则可以通过两行代码解决问题:
from pandas import DataFrame, Series
counts = DataFrame(d2).T.join(Series(d1).apply(Series)\
.stack().reset_index().set_index(0), how='outer')\
.fillna(0).astype(int).groupby('level_0').sum()
counts = counts.loc[counts.index > 0, [0, 1, 2]]
counts.index.name = 'id'
counts.columns = ('Positive_score', 'Neutral_score', 'Negative_score')
counts.to_csv("file.csv", sep=';')
答案 2 :(得分:1)
这应该有效:
d1 = {'15': ['monter', 'boulangerie'], '44': ['être', 'méchant'], '45': ['haïr', 'Foret', 'enchanter', 'être', 'beau', 'mille', 'faux', 'jeune', 'fille', 'être', 'asseoir', 'bor', 'mer'], '47': ['comprendre', 'vie', 'perdre', 'aide', 'stp', 'maman', 'perdre', 'être', 'seul', 'ami', 'aimer']}
d2 = {"beau": ['1', '3', '2'], 'seul': ['0', '1', '2'], 'cité des loups': ['230', '63', '48'], 'pavage mosaïque': ['296', '108', '0'], "répression de toute forme d'opposition": ['0', '3', '2'], 'en prendre pour': ['0', '81', '260'], 'Walt Disney Records': ['2', '3', '1'], 'paraombilical': ['3', '1', '2'], 'Eugênio': ['32', '85', '0'], 'laissant': ['0', '1', '1'], 'Baudouin de Champagne': ['2', '4', '2'], 'loi Goblet': ['3', '2', '1'], 'jeune': ['290', '49', '81'], 'Guezer': ['91', '44', '29'], "aimer": ['134', '48', '0'], 'marque de produit de luxe': ['21', '28', '2'], 'Zostérops de Woodford': ['18', '38', '0'], 'Henry Ludwell Moore': ['3', '7', '0'], 'Charlyne>prénom': ['23', '28', '0'], 'famille Masreliez': ['5', '4', '2'], 'canadienne-américaine': ['10', '3', '0'], 'bédéguar': ['63', '292', '0'], 'prix Lalande': ['2', '3', '1'], 'rapiécetais': ['2', '2', '0'], 'Maysoon': ['0', '30', '0'], 'hospice civil': ['265', '51', '50'], 'soutirer à': ['0', '6', '11'], 'faux': ['18', '21', '0'], "l'homme amphibie": ['2', '2', '1'], 'Johnny Ryan': ['5', '2', '0'], 'marcher des épaules': ['83', '85', '60'], 'faire lit à part': ['5', '5', '2'], 'Fonteny': ['4', '3', '0'], 'effet boomerang': ['96', '92', '70'], 'Guy Tirolien': ['0', '3', '0'], 'Mans-Les': ['5', '2', '0'], 'Stuart Jacques Ier': ['19', '331', '0'], 'Jupiter II': ['26', '33', '18'], 'Reuth bei Erbendorf': ['0', '10', '2'], 'couronne perlée du gland': ['1', '3', '3'], 'Wikipédia en Arabe bédouin': ['1', '2', '1'], 'Karen Karapetian': ['3', '3', '0'], 'trois mille cinq cents': ['307', '93', '0'], 'charge familiale': ['200', '68', '78'], 'Neuville-Saint-Rémy': ['0', '19', '0'], 'méchant': ['0', '25', '79'], 'modèle de simulation numérique': ['187', '111', '45'], 'Akrotiri': ['0', '313', '23']}
d3 = {k: [0, 0, 0] for k in d1.keys()}
for k, v in d1.items():
for word in v:
if word in d2:
d3[k] = [a + b for a, b in zip(map(int, d2[word]), d3[k])]
d3 = {k: list(map(str, v)) for k, v in d3.items()} # we require strings
要另存为csv:
import csv
with open('filename.csv', 'w') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=';',
quotechar="'", quoting=csv.QUOTE_MINIMAL)
csvwriter.writerow(['id', 'Positive Score', 'Neutral Score', 'Negative Score'])
for k, v in d3.items():
csvwriter.writerow([k] + v)