2017-06-09 7 views
0

Ich habe folgende Python-Code:fusionieren Listen in Python

import subprocess 

def disk(): 
for i in ('/tmp' , '/usr/mware' , '/var' , '/var/mware'): 
    df1 = subprocess.Popen(['df','-h', i], stdout=subprocess.PIPE).communicate()[0].split() 
    df1.remove("on") 
    print df1 

disk() 

ich die folgende Ausgabe bin immer:

['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/rootvg-tmplv', '2.0G', '39M', '2.0G', '2%', '/tmp'] 
['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/appvg-usrmwarelv', '20G', '33M', '20G', '1%', '/usr/mware'] 
['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/rootvg-varlv', '10G', '3.8G', '6.3G', '38%', '/var'] 
['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/appvg-varmwarelv', '20G', '33M', '20G', '1%', '/var/mware'] 

Ich möchte diese Listen verschmelzen und Duplikate entfernen.

+0

Und was ist ein erwartetes Ergebnis? Sie möchten Zusammenführungslisten oder ihre Elemente? – Dmitry

+0

df1 ist Ihre Ausgabeliste? – Tbaki

Antwort

-1

Warum wollen Sie separate Prozesse für jedes Dateisystem erzeugen, zu überprüfen, während df der Lage ist, alle von ihnen in einem Lauf zu überprüfen?

df1 = subprocess.Popen(['df','-h', '/tmp' , '/usr/mware' , '/var' , '/var/mware'], stdout=subprocess.PIPE).communicate()[0].split() 
+0

Obwohl das eine gute Bemerkung ist, ist dies nicht der Punkt der Frage. Sie sollten dies stattdessen als Kommentar veröffentlichen. –

+0

Danke, es war für mich, ich bearbeitet den Code wie: 'Import subprocess def Scheibe(): df = [] für i in ('/ tmp', '/ usr/mware',‚/ var ','/var/mware '): df1 = subprocess.Popen ([' df ',' - h ','/tmp ','/usr/mware ','/var ','/var/mware ' ], stdout = subprocess.PIPE) .communicate() [0] .split() df1.remove ("on") drucken df1 disk() ' – user3640472

1

Listen zusammenführen ist so einfach.

a= ['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/rootvg-tmplv', '2.0G', '39M', '2.0G', '2%', '/tmp'] 
b= ['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/appvg-usrmwarelv', '20G', '33M', '20G', '1%', '/usr/mware'] 
c= ['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/rootvg-varlv', '10G', '3.8G', '6.3G', '38%', '/var'] 
d = ['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted', '/dev/mapper/appvg-varmwarelv', '20G', '33M', '20G', '1%', '/var/mware'] 
remove_duplicates = list(set(a+b+c+d)) 
+0

+1, aber ich bin neugierig auf den Vergleich zwischen dem Mischen der Listen zuerst und dann 'set'ting sie und' set'ting die Listen zuerst und dann ihre Union ... –

0

Sie können verketten und verwenden set:

def disk(): 
    df = [] 
    for i in ('/tmp' , '/usr/mware' , '/var' , '/var/mware'): 
     df1 = subprocess.Popen(['df','-h', i], stdout=subprocess.PIPE).communicate()[0].split() 
     df1.remove("on") 
     df = df + df1 
    return set(df) 
0
import subprocess 

# prepare a list of columns in the beginning 
df_out = [['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted']] 

def disk(): 
    for i in ('/tmp' , '/usr/mware' , '/var' , '/var/mware'): 
     df1 = subprocess.Popen(['df','-h', i], 
        stdout=subprocess.PIPE).communicate()[0].split() 
     df1.remove("on") 

     # append the remaining columns in the list 'df1' 
     df_out.append(df1[6:]) 

disk() 

# print the final output 
print df_out 

Dies gibt Ihnen die Ausgabe als -

[['Filesystem', 'Size', 'Used', 'Avail', 'Use%', 'Mounted'], 
['/dev/mapper/rootvg-tmplv', '2.0G', '39M', '2.0G', '2%', '/tmp'], 
['/dev/mapper/appvg-usrmwarelv', '20G', '33M', '20G', '1%', '/usr/mware'], 
['/dev/mapper/rootvg-varlv', '10G', '3.8G', '6.3G', '38%', '/var'], 
['/dev/mapper/appvg-varmwarelv', '20G', '33M', '20G', '1%', '/var/mware']] 
0

Sie die set.union Methode verwenden:

list(set(df1).union(df2, df3, df4)) # assuming the invidual lists are called df1, df2, ... 

ein set ist eine ungeordnete Sammlung von einzigartigen Objekte . Sie verlieren die Duplikate, verlieren aber auch Ihre Bestellung. Im Fall, dass Sie es bestellt und ohne Duplikate könnten Sie OrderedDict verwenden:

from collections import OrderedDict 
from itertools import chain 

list(OrderedDict.fromkeys(chain(a, b, c, d))) 
1
import subprocess 

def disk(): 
    df_set = set() 
    for i in ('/tmp', '/usr/mware', '/var', '/var/mware'): 
     df1 = subprocess.Popen(['df','-h', i], stdout=subprocess.PIPE).communicate()[0].split() 
     df1.remove("on") 
     df_set = df_set.union(set(df1)) 
    print(list(df_set)) 
disk() 

Above Code wird Ihre Liste verschmelzen und Duplikate von ihm entfernen.