首页 > 解决方案 > Python csv(两列:键/值)到字典

问题描述

是否可以将 csv 文件中的数据读入字典,使得第一列是键,第二列。

例如,我有一个 csv 文件

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.

code 表示键,msg 表示与每个代码关联的值。

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)

结果:

{'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

我想搜索与每个键关联的值。

EG:当我写:

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

我会得到一个输出:

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

标签: pythoncsvdictionary

解决方案


没有任何导入,您可以使用:

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)

输出:

{'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.'}

Python 演示


笔记:

  1. 要搜索key,我通常使用:

    if '123456' in d:
        print(d['123456'])
        # Lorem ipsum dolor sit amet, consectetur adipiscing elit
    
  2. 打印字典 keysvalues

    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.'])
    

推荐阅读