1
votes

Python csv (deux colonnes: clé / valeur) vers le dictionnaire

Est-il possible de lire les données d'un fichier csv dans un dictionnaire, de sorte que la première colonne soit la clé et la deuxième colonne.

Par exemple. J'ai un fichier csv

>>> The key 123456 has this value :Lorem ipsum dolor sit amet, consectetur adipiscing elit

le code représente les clés, et msg représente les valeurs associées à chaque code.

key= "123456"
value=mydict.get(key)
print(key + "has this value : " + value)

Résultat:

{'code;msg': [], '123456;Lorem ipsum dolor sit amet': [' consectetur adipiscing elit'], '345981;"sed do eiusmo ut labore': [' et dolore magna aliqua;"'], '459827;ullamco': [' laboris nisi ut aliquip ex ea commodo consequat.'], '490023;veniam': [' quis nostrud exercitation'], '345612;mollit anim id est laborum.': []}
None

Je voudrais rechercher les valeurs associées à chaque clé.

EG: Quand j'écris:

import csv
with open('test.csv') as f:
        reader = csv.reader(f)
        mydict = {rows[0]:rows[1:] for rows in reader}
        print(mydict)
x = mydict.get("123456")
print(x)


2 commentaires

quel est votre problème ici?


Je décris déjà ce que j'aimerais avoir comme sortie


3 Réponses :


1
votes

Le problème est avec les données d'entrée, le fichier contient plusieurs virgules et vous lisez avec un lecteur csv. La deuxième colonne doit être entourée de guillemets doubles.

{123456: ['Lorem ipsum dolor sit amet, consectetur adipiscing elit'],
 345981: ['sed do eiusmo ut labore, et dolore magna aliqua;'],
 459827: ['ullamco, laboris nisi ut aliquip ex ea commodo consequat.'],
 490023: ['veniam, quis nostrud exercitation'],
 345612: ['mollit anim id est laborum.']}

Après avoir modifié les données si vous exécutez votre extrait de code, cela fonctionnera correctement.

import pandas as pd

df = pd.read_csv(filepath_or_buffer = CSV_FILE_PATH") 

df.set_index('code').T.to_dict('list')

Vous trouverez ci-dessous un complément sur l'utilisation des pandas:

Vous pouvez utiliser la méthode todic dans les pandas, lire le fichier csv à l'aide de pandas, puis le convertir en dataframe, puis exécuter le code ci-dessous

XXX

Code complet:

df.set_index('code').T.to_dict('list')

Sortie:

{'code': ['msg'], '123456': ['Lorem ipsum dolor sit amet, consectetur adipiscing elit'], '345981': ['sed do eiusmo ut labore, et dolore magna aliqua;'], '459827': ['ullamco, laboris nisi ut aliquip ex ea commodo consequat.'], '490023': ['veniam, quis nostrud exercitation'], '345612': ['mollit anim id est laborum.']}
['Lorem ipsum dolor sit amet, consectetur adipiscing elit']


1 commentaires

Je ne vois pandas #tag nulle part sur cette page, pourquoi avez-vous publié ceci?



1
votes

Utilisation du module csv .

Ex:

{'123456': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
 '345612': 'mollit anim id est laborum.',
 '345981': 'sed do eiusmo ut labore, et dolore magna aliqua',
 '459827': 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.',
 '490023': 'veniam, quis nostrud exercitation'}

Sortie:

import csv

result = {}
with open('test.csv') as infile:
    reader = csv.reader(infile, delimiter=';')
    next(reader)                          #Skip Header
    for row in reader:                    #Iterate Each Line
        result[row[0]] = row[1]           #Form Dictionary 
print(result)


0 commentaires

2
votes

Sans aucune importation, vous pouvez utiliser:

print(d.keys(), d.values())
# dict_keys(['123456', '345981', '459827', '490023', '345612'])
# dict_values(['Lorem ipsum dolor sit amet, consectetur adipiscing elit', 'sed do eiusmo ut labore, et dolore magna  aliqua;', 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.', 'veniam, quis nostrud exercitation', 'mollit anim id est laborum.'])

Sortie:

if '123456' in d:
    print(d['123456'])
    # Lorem ipsum dolor sit amet, consectetur adipiscing elit

Démo Python


Remarques:

  1. Pour rechercher par clé , j'utilise normalement:

    {'123456': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit', '345981': 'sed do eiusmo ut labore, et dolore magna aliqua;', '459827': 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.', '490023': 'veniam, quis nostrud exercitation', '345612': 'mollit anim id est laborum.'}
    
  2. Impression des touches du dictionnaire et des valeurs

    with open('test.csv') as f:
        csv = f.readlines()
    
    d = {}
    for line in csv[1:]:  # Loop csv lines skipping first line csv[1:] (headers) 
        m = line.split()
        if len(m) > 1:
            d[m[0]] = " ".join(m[1:])
    print(d)
    


0 commentaires