【问题标题】:Creating multiple dictionaries from CSV - Python 2.7从 CSV 创建多个字典 - Python 2.7
【发布时间】:2017-12-09 20:29:35
【问题描述】:

问题

我想创建多个字典,因为它们都有一个唯一标识符,该标识符位于 CSV 文件的第一行

我想调用 2911['ipadd'] 来返回 CSV 文件第二行的相关代码,但是我难住了。

我发现这似乎与我想要达到的目标足够接近 Creating multiple nested dictionaries from .txt file

但是人们推荐的东西不适用于我的解决方案,所以它被碰运气了。

代码

mylist = []

with open('file.csv','r') as f:
   reader = csv.reader(f)
   for row in reader:
      mylist.append({'name': row[0], 'ipadd': row[1], 'mac': row[2], 'interfaces': row[3:]})

for line in mylist:
   print(line['ipadd'])

我尝试通过第一行唯一标识一个变量,然后使用它将信息附加到,但当然变量没有“附加”功能。

CSV 信息

2811,1.1.1.1,AA:BB:CC:DD:EE,Fa0/0,Fa0/1,Fa1/0,Fa1/1

2911,2.2.2.2,BB:CC:DD:EE:FF,S0/0/0,S0/0/1,S0/1/0,S0/1/1

【问题讨论】:

  • 请发布您的文件样本以及该样本的所需输出
  • @Ajax1234 我的错误我现在将其添加到问题中

标签: python python-2.7 csv dictionary


【解决方案1】:

你可以试试这个:

import csv
headers = ['name', 'ipadd', 'mac', 'interfaces']
new_data = [{a:b for a, b in zip(headers, i[:3]+[i[3:]])} for i in csv.reader(open('file.csv'))]

【讨论】:

  • 代码运行良好,看起来不错,但是只有在 new_data 中指定 for line 时才会优雅地显示: print(line['name'])
  • @DannyWatson 你想要什么替代方案?
  • 我想我可能必须实现一个对象来实现我的目标,我将不得不弄清楚如何根据 csv 中每一列的第一行中的值动态创建对象
  • @DannyWatson 您希望对每列第一行中的值具体做什么?
  • 是在原帖“我想调用2911['ipadd']返回CSV文件第二行的相关代码,但是我难住了。”
【解决方案2】:

我做了一个解决方法;我最终创建了一个对象

class router:
   name = ''
   ipadd = ''
   mac = ''
   interfaces = []
   def __init__(self, name, ipadd, mac, interfaces):
      self.name = name
      self.ipadd = ipadd
      self.mac = mac
      self.interfaces = interfaces

with open('file.csv') as f:
reader = csv.reader(f)
for row in reader:
    item = row[0]
    newitem = item.split('\t')
    mylist.append(router(newitem[0], newitem[1], newitem[2], newitem[3:]))

【讨论】:

  • @Ajax1234 - 这是您认为适合回答的问题吗? for 循环后的 2 行代码有点不优雅,但它完成了工作
  • 如果它解决了您的问题,请随时将此解决方案标记为已回答。
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2018-04-07
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多