1
votes

comment faire correspondre et remplacer la valeur de listA column1 à la valeur de la colonne List 2 qui correspond à List column1 comme nous le faisons dans vlookup

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


2 commentaires

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.


3 Réponses :


1
votes
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

4 commentaires

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é.



0
votes
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 

0 commentaires

0
votes

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)


2 commentaires

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é)