Ich habe eine Liste wie diese:

['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4', 'VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01', 'Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']

Wie kann ich es wie folgt in ein Wörterbuch konvertieren:

{'1' : ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4'], '2' : ['VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01'], '3' : ['Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']}

Vielen Dank, Quang

-4
Quang Le 18 Apr. 2018 im 14:28

4 Antworten

Beste Antwort

Inspiriert vom Grouper-Rezept in der itertools-Dokumentation:

l = ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4', 
     'VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01', 
     'Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']

d = {i: sublist for i, sublist in enumerate(zip(*([iter(l)]*4)))}

print(d)

#{0: ('Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4'), 
# 1: ('VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01'), 
# 2: ('Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0')}
1
Thierry Lathuille 18 Apr. 2018 im 11:55

Angenommen, Ihre Regel lautet, die Liste alle vier Elemente aufzuteilen, können Sie dies folgendermaßen tun:

res = {i+1: n[i*4:4*(i+1)] for i in range(len(n)//4)}

Was gibt:

{1: ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4'], 
 2: ['VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01'], 
 3: ['Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']}

Oder wenn Sie allergisch gegen das Schneiden sind:

n_i = iter(n)
res = {i+1: [next(n_i) for _ in range(4)] for i in range(len(n)//4)}
1
Ev. Kounis 18 Apr. 2018 im 11:32
input = ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4', 'VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01', 'Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']

d = {}
for i in range(1,len(input)/3):
    d[i] = []

item = iter(input)
for i in range(len(d)):
    d[i+1] = [next(item) for x in range(len(d)+1)]
print d

Das Ergebnis als d wäre {1: ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4'], 2: ['VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01'], 3: ['Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']}

1
lola 18 Apr. 2018 im 13:56

Wenn Sie durch 4 teilen möchten, verwenden Sie diese Funktion beispielsweise: Wie teilen Sie eine Liste in gleich große Blöcke auf?

l = ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4', 'VMware Network Adapter VMnet1', '192.168.10.111', '255.255.255.0', '00-50-56-C0-00-01', 'Loopback Pseudo-Interface 1', '127.0.0.1', '255.0.0.0', '00-00-00-00-00-00-00-E0']

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

d = {ind:i for ind, i in enumerate(chunks(l, 4), 1)}

D gibt zurück:

{1: ['Wi-Fi', '10.0.10.22', '255.255.0.0', '34-F3-9A-4C-D0-C4'],
 2: ['VMware Network Adapter VMnet1',
  '192.168.10.111',
  '255.255.255.0',
  '00-50-56-C0-00-01'],
 3: ['Loopback Pseudo-Interface 1',
  '127.0.0.1',
  '255.0.0.0',
  '00-00-00-00-00-00-00-E0']}
1
Anton vBR 18 Apr. 2018 im 11:32