Bằng cách lặp qua danh sách python, tôi muốn tạo một danh sách từ điển, theo đó giá trị của mỗi từ điển cũng là một danh sách.Làm cách nào để tạo danh sách từ điển (có giá trị danh sách) từ danh sách?
Cấu trúc sẽ là:
[{key1: [val1, val2]}, {key2: [val3, val4]}, {key3: [val5, val6]}, ...]
Tôi bắt đầu với một danh sách các số nguyên:
my_list = [3423, 77813, 12, 153, 1899]
Đối với mỗi phần tử trong danh sách, điều này sẽ trở thành một chìa khóa từ điển. Sau đó tôi nối thêm hai mục vào giá trị của từ điển (đây là danh sách). (Hãy nói rằng hai mục luôn "chó" và "mèo")
Đây là những gì kết quả cuối cùng sẽ giống như thế:
[{3423:['dog', 'cat']}, {77813:['dog', 'cat']}, {12:['dog', 'cat']},
{153:['dog', 'cat']}, {1899:['dog', 'cat']}]
nỗ lực của tôi để làm điều này có nhiều vấn đề:
for i in my_list:
d = {} ## create a dictionary 'd'
d[i] = [].append('dog') ## or `d[i] = ['dog'].append('cat')`
my_list.append(d) ## here is a bug
my_list.remove(i) ## remove the item from the list
Tôi không thích điều đó, tôi phải đặt tên cho một từ điển trống và đặt tên cho chúng là một thứ giống nhau (ở đây,
d
). Sau đó, tôi muốn truy cập từng từ điển này bằng các phím --- Tôi không quan tâm đến tên của chúng.Tôi không biết cách thêm một cách hợp lý nhiều mục vào giá trị từ điển khi nó thực sự được coi là danh sách. Nếu tôi muốn thêm một số mặt hàng thì sao?
Lỗi đang thêm từ điển vào danh sách gốc và sau đó xóa mục. Đương nhiên, điều này có thể được giải quyết với một danh sách mới:
new_list = [] for i in my_list: d = {} d[i] = [].append('dog') new_list.append(d) my_list.remove(i)
nhưng điều này cảm thấy rất vụng về.
Bạn có phải sử dụng cấu trúc này để đạt được mục tiêu của mình không? Một cách tiếp cận hướng đối tượng có thể làm giảm một số sự phức tạp, tùy thuộc vào những gì bạn đang cố gắng đạt được. Ít nhất bạn có thể xem ''defaultdict'' trong' 'collections''-module. Sau đó, bạn có thể làm '' list_dict = defaultdict (danh sách) '', để bạn biết rằng mỗi mục trong dict đã là một danh sách trống. –