je 3 DB appelle retourner un tuple de tuples avec un nom, code et compte comme ceci:fusionner plusieurs listes de listes basées sur le modèle
year = (('Fanklin Grand Isle', '5560', 1), ('Windham', '3457', 1))
month = (('Fanklin Grand Isle', '5560', 1), ('Chittendon', '3367', 1))
week = (('Fanklin Grand Isle', '5560', 1), ('Chittendon', '3367', 1))
Je dois les fusionner tous ensemble afin qu'ils aient le nom, le code et le compte pour l'année, le mois et l'hebdomadaire.
Mon problème est que s'il n'y a aucun enregistrement j'ai besoin d'insérer le nom et le code dans ET une valeur 0 pour les comptes. Le produit final devrait être quelque chose comme:
result = (('Windham', '0905', 1, 1, 0), ('Windsor Windham', '7852', 0, 0, 0), ('Washington', '3292', 0, 0, 0),
('Orleans Essex', '44072', 1, 1, 0), ('Addison', '2853', 0), ('Bennington', '3778', 0),
('Fanklin Grand Isle', '5560', 0, 0 0), ('Caledonia', '1992', 0, 0, 0),
('Rutland', '2395', 1, 0, 0), ('Chittendon', '3367', 1, 1, 0), ('Lamoille', '5229',0, 0 0))
Je tentais de nid d'une boucle pour vérifier si le nom était présent dans l'appel de DB et le modèle. IF si la valeur était append DB à la liste, sinon ajoutez 0
i = 0
for p in newlist:
try:
if p[0] == mlist[i][0]:
print("HERE: {} {}".format(p[0], mlist[i][0]))
p.append(mlist[i][-1])
i += 1
else:
p.append(0)
except IndexError:
continue
Ceci est la valeur DB AJOUT DE mais pas le zéro. Je suis sûr qu'il doit y avoir une meilleure façon de le faire et de le faire fonctionner.
Modifier
Voici le code mis à jour en fonction des réponses reçues. Pour moi, il remplace encore chaque valeur year
avec un 0.
DONNÉES:
year = (('Fanklin Grand Isle', '5560', 1), ('Windham', '0905', 0), ('Windsor Windham', '7852', 0), ('Washington', '3292', 0), ('Orleans Essex', '44072', 0), ('Chittendon', '18028633367', 1), ('Addison', '12853', 0), ('Bennington', '3778', 0), ('Caledonia', '11992', 0), ('Rutland', '1895', 0), ('Chittendon', '18367', 0), ('Lamoille', '1809', 0), ('Windham', '180905', 0), ('Windsor Windham', '180852', 0), ('Waston', '18022623292', 0), ('Orleans Essex', '18072', 0), ('Addison', '1853', 0), ('Bennington', '1778', 0), ('Fanklin Grand Isle', '18560', 0), ('Caledonia', '180292', 0), ('Rutland', '195', 0), ('Lamoille', '18229', 0))
month = (('Fanklin Grand Isle', '5560', 1), ('Chittendon', '18028633367', 1))
week = (('Fanklin Grand Isle', '5560', 1), ('Chittendon', '18367', 1))
code:
from collections import defaultdict
joined_data = defaultdict([0, 0, 0].copy)
for entry in year:
# we create the default entry by calling the defaultdict with a key
# and immediately grab the newly created list
count = joined_data[(entry[0],entry[1])]
# we swap *inplace* the value given by the DB query
count[0] = entry[2]
# rinse and repeat with the rest of the data
for entry in month:
count = joined_data[(entry[0], entry[1])]
count[1] = entry[2]
for entry in week:
count = joined_data[(entry[0], entry[1])]
count[2] = entry[2]
# Finally we format the data to the required format
result = tuple(key+tuple(value) for key,value in joined_data.items())
print(result)
Résultat:
(('Fanklin Grand Isle', '5560', 0, 1, 1), ('Windham', '0905', 0, 0, 0), ('Windsor Windham', '7852', 0, 0, 0), ('Washington', '3292', 0, 0, 0), ('Orleans Essex', '1072', 0, 0, 0), ('Chittendon', '13367', 0, 1, 1), ('Addison', '2853', 0, 0, 0), ('Bennington', '1878', 0, 0, 0), ('Caledonia', '1992', 0, 0, 0), ('Rutland', '2395', 0, 0, 0), ('Lamoille', '5229', 0, 0, 0))
Bien sûr, toutes ces villes obtiennent un 'pour l'année 0' si l'année -count est '0' dans votre liste' year'. Quel résultat attendiez-vous à la place, et pourquoi? –
Désolé tobias ne voulait pas éditer votre message, destiné à modifier le mien – Joe