2016-08-23 3 views
1

У меня есть скрипт, который читает CSV файл csv fileдобавляющим значения в словарь Python

Asset IP Address,Vulnerability Title 
50.103.128.11,Partition Mounting Weakness 
10.103.128.11,UDP IP ID Zero 
10.103.128.11,Root's umask value is unsafe 
0.103.128.11,Root's umask value is unsafe 
20.103.128.11,Root's umask value is unsafe 
10.103.128.11,ICMP timestamp response 
22.103.128.11,ICMP timestamp response 
10.103.128.11,UDP IP ID Zero 
10.103.129.11,Partition Mounting Weakness 

и после того, как работает мой сценарий

import csv 
from pprint import pprint 
#with open('test.csv', 'rb') as f: 
# reader = csv.DictReader(f, delimiter=',') 
# for row in reader: 
#  print row 
#dict = {a:[], b:[]} 
dict = {} 
with open('test.csv', 'rb') as f: 
    reader = csv.DictReader(f, delimiter=',') 
    for row in reader: 
     a = row["Vulnerability Title"] 
     b = [row["Asset IP Address"]]  
     #b = row(["Asset IP Address"]) 
     #dict = {a:[], b:[]}   
     if a in dict: 
     #print row["Vulnerability Title"] 
     #if row["Vulnerability Title"] in dict: 
      dict[a].append(b) 
     else: 
      dict[a] = b 
pprint(dict) 

читает списки уязвимости и создать словарь с изобр, которые имеют эта уязвимость. Когда-либо мои результаты - это список, в котором есть одна дополнительная скобка. хотел связаться с кем-нибудь, у кого есть идеи или может помочь мне. results

{'ICMP timestamp response': ['10.103.128.11', ['22.103.128.11']], 
'Partition Mounting Weakness': ['50.103.128.11', ['10.103.129.11']], 
"Root's umask value is unsafe": ['10.103.128.11', 
            ['0.103.128.11'], 
            ['20.103.128.11']], 
'UDP IP ID Zero': ['10.103.128.11', ['10.103.128.11']]} 
+0

Вам не нужно Outter '[]' в 'б = [строка [» IP-адрес актива "]]' – innoSPG

ответ

2

Использование setdefault(), не делают b список, и не использовать встроенные команды в качестве имен переменных:

d = {} 
with open('test.csv', 'rb') as f: 
     reader = csv.DictReader(f, delimiter=',') 
for row in reader: 
    a = row["Vulnerability Title"] 
    b = row["Asset IP Address"] 
    d.setdefault(a, []).append(b) 
+0

Следует также отметить, что вы исправили назначение 'b'. И есть ошибка с отступом (возможно, только ошибка отправки, но вы скопировали ее). – alecxe

+0

Да, я просто копирую и вставляю, спасибо за указание. Я вижу, ты был немного быстрее, чем я. – Anthon

2

Вы пытаетесь изобрести defaultdict:

from collections import defaultdict 

d = defaultdict(list) 
with open('test.csv', 'rb') as f: 
    reader = csv.DictReader(f, delimiter=',') 
    for row in reader: 
     d[row["Vulnerability Title"]].append(row["Asset IP Address"]) 

pprint(d) 

В качестве примечания, dict не лучший выбор для имени переменной - вы затененияbuilt-in dict(), выберите другое имя переменной.

Смежные вопросы