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 Antworten
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')}
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)}
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']}
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']}
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.