Saya mencoba menggabungkan dua daftar ke dict:

l1 = [1, 3, 6, 0, 1, 1]
l2 = ['foo1', 'foo2', 'foo1', 'foo2', 'foo2', 'bar1']

Saya ingin mendapatkan:

list = [{"foo1": 1},
             {"foo2": 3},
             {"foo1": 6},
             {"foo2": 0},
             {"foo2": 1},
             {"bar1": 1},]

Mencoba menggunakan zip tetapi mendapatkan kesalahan :""

-3
Andrey Andrey 5 Januari 2021, 06:18

3 jawaban

Jawaban Terbaik

Anda dapat mencoba ini:

l1 = [1, 3, 6, 0, 1, 1]
l2 = ['foo1', 'foo2', 'foo1', 'foo2', 'foo2', 'bar1']

data = [{k: v} for k, v in zip(l2, l1)]

print(data)

Keluaran:

[{'foo1': 1}, {'foo2': 3}, {'foo1': 6}, {'foo2': 0}, {'foo2': 1}, {'bar1': 1}]

Saya tidak akan menganggap ini sebagai struktur data yang ideal, kecuali jika Anda memiliki lebih banyak data di kamus individu.

4
bherbruck 5 Januari 2021, 03:23

Jawaban dari @Tenacious B mencapai apa yang Anda minta.

Anda mungkin, bagaimanapun, lebih baik dengan kamus daftar. Kuncinya adalah item dari l2 dan nilainya adalah daftar yang berisi nilai yang sesuai dari l1. collections.defaultdict membuatnya mudah:

l1 = [1, 3, 6, 0, 1, 1]
l2 = ['foo1', 'foo2', 'foo1', 'foo2', 'foo2', 'bar1']

from collections import defaultdict

d = defaultdict(list)
for k, v in zip(l2, l1):
    d[k].append(v)

print(d)

Keluaran:

defaultdict(, {'foo1': [1, 6], 'foo2': [3, 0, 1], 'bar1': [1]})

Sekarang Anda dapat mengakses data dengan kunci:

>>> d['foo2']
[3, 0, 1]
>>> d['foo1']
[1, 6]
2
mhawke 5 Januari 2021, 03:42

Saya cukup yakin <zip object at 0x0000021A9C9F71C0> bukan kesalahan, Anda hanya belum menjalankan kodenya. Itu disimpan dalam objek zip yang menunggu eksekusi.

1
Addicted2Cookies 5 Januari 2021, 03:20