J'ai 2 listes (en-tête et dataValue). Je souhaite faire correspondre et remplacer la colonne de valeur de mes données 1 dans la colonne 1 du fichier d'en-tête pour la valeur qui correspond à la colonne dataValue n 1 avec la valeur d'en-tête colonne 2
Fichier d'en-tête
{'Vname': 'M0001001', 'V_Value': '50'}
{'Vname': 'X011_0001', 'V_Value': '100'}
{'Vname': 'X011_0004', 'V_Value': '45'}
{'Vname': 'X030_0008', 'V_Value': '35'}
{'Vname': 'X030_0002', 'V_Value': '80'}
{'Vname': 'X030_0003', 'V_Value': '100'}
{'Vname': 'X030_0004', 'V_Value': '200'}
{'Vname': 'X030_0005', 'V_Value': '60'}
Valeur
{'Vname': 'TotalLoad', 'V_Value': '50'}
{'Vname': 'HoisePosition', 'V_Value': '100'}
{'Vname': 'TotalLoad1', 'V_Value': '45'}
{'Vname': 'TotalLoad2', 'V_Value': '35'}
{'Vname': 'HoisePosition2', 'V_Value': '80'}
{'Vname': 'GearTemprature', 'V_Value': '100'}
{'Vname': 'OilLevel', 'V_Value': '200'}
{'Vname': 'OilTemprature', 'V_Value': '60'}
python
Hfile=open("header.csv",'r')
DValuef=open("DataValue.csv",'r')
hf=Hfile.readlines()
dv=DValuef.readlines()
Hfile.close()
DValuef.close()
dictA={}
dictB={}
value1=[]
value2=[]
for x in hf:
myList1=x.strip().split(',')
dictA={myList1[0]:myList1[1]}
value1.append(dictA)
for y in dv:
myList2=y.strip().split(',')
dictB={'Vname':myList2[0],'V_Value':myList2[1]}
print(dictB)
Résultat attendu
M0001001,50 X011_0001,100 X011_0004,45 X030_0008,35 X030_0002,80 X030_0003,100 X030_0004,200 X030_0005,60
Réel résultat
TotalLoad,M0001001 HoisePosition,X011_0001 TotalLoad1,X011_0004 TotalLoad2,X030_0008 HoisePosition2,X031_0002 GearTemprature,X032_0003 OilLevel,X033_0004 OilTemprature,X034_0005
3 Réponses :
for x in hf:
myList1=x.strip().split(',')
dictA[myList1[1]] = myList1[0]
for y in dv:
myList2=y.strip().split(',')
dictB={'Vname':dictA[myList2[0]],'V_Value':myList2[1]}
print(dictB)
this should give u what u need.. but i don't why you need to arrange the data like this
oui, c'est faux, vous n'avez pas accès à la myList1 à partir de la 2ème boucle
cela a du sens, vous utilisez la dernière valeur enregistrée dans myList1.
pourquoi tu n'essaies pas d'exécuter la réponse que je t'ai donnée
Désolé ça marche. Merci de votre aide. c'est ce que j'ai vraiment excepté.
for x in hf:
myList1=x.strip().split(',')
dictA[myList1[1]] = myList1[0]
for y in dv:
myList2=y.strip().split(',')
dictB[dictA[myList2[0]] : myList2[1]]
print(dictB)
this is a better format
vous pouvez le faire comme ci-dessous en utilisant la compréhension de liste
header_file = '''TotalLoad,M0001001
HoisePosition,X011_0001
TotalLoad1,X011_0004
TotalLoad2,X030_0008
HoisePosition2,X031_0002
GearTemprature,X032_0003
OilLevel,X033_0004
OilTemprature,X034_0005'''
value_file = '''M0001001,50
X011_0001,100
X011_0004,45
X030_0008,35
X030_0002,80
X030_0003,100
X030_0004,200
X030_0005,60'''
hf = [line for line in header_file.split("\n")]
dv = [line for line in value_file.split("\n") ]
header_dict = {key: value for value, key in [line.split(",") for line in hf] }
value_dict = [{"Vname": header_dict.get(key), "V_value": value} for key, value in [line.split(",") for line in dv] ]
print(value_dict)
Salut Dev, ça a l'air bien. mais si l'adresse de valeur n'est pas dans la liste, elle n'en renvoie aucune. je veux en fait une exception si la liste n'est pas là.
pour cela, vous pouvez utiliser header_dict [clé] au lieu de header_dict.get (clé)
pourquoi ne pas créer un dictionnaire comme {'TotalLoad': '50', 'HoisePosition': '100', 'TotalLoad1': '45', 'TotalLoad2',: '35'}
La liste est quelque part autour de 400 et je ne peux passer le paramètre avec l'adresse "x030 ..." pour lire la valeur. donc quand vient le résultat, je veux remplacer l'adresse par mon propre nom de déclaration.