Tôi đang thử nghiệm với python và bị kẹt cố gắng hiểu các thông báo lỗi trong ngữ cảnh của những gì tôi đang làm.Sự hiểu biết với nhiều bộ nhập liệu
Tôi đang chơi xung quanh với comprehensions và cố gắng tìm một mô hình để tạo ra một danh sách/hiểu từ điển với nhiều hơn một đầu vào thiết lập (giả định này là có thể):
Lưu ý: Ở đây chữ đầu vào thiết lập có nghĩa là khu vực đầu vào của việc hiểu. Trong ký pháp setbuilder, từ nơi python bắt nguồn từ sự hiểu biết của nó [Y cho X trong LIST], Y là hàm đầu ra, X là biến và LIST là tập hợp đầu vào.
Giả sử tôi có mã làm việc tiếp theo:
from random import randint
mydict = {k: 0 for k in range(10)}
result = {randint(0,9): v + 1 for v in mydict.values()}
Tôi không cố gắng để làm bất cứ điều gì đặc biệt về nó. Đây không phải là mã hữu ích bởi vì nó sẽ không hoạt động như mong đợi. Tất cả các phần tử trong từ điển sẽ có giá trị 1, thay vì chỉ các giá trị được chỉ bởi trình tạo ngẫu nhiên. Mục tiêu duy nhất của tôi là có cơ sở từ nơi tôi bắt đầu nỗ lực làm việc với một bộ bộ đầu vào.
from random import randint
mydict = {k: 0 for k in range(10)}
result = {k: v + 1 for k, v in (randint(0,9), mydict.values())}
Tùy chọn này cung cấp cho tôi: TypeError: 'int' object is not iterable
.
Bằng cách trao đổi các bộ đầu vào và giải nén tôi có:
result = {k: v + 1 for *v, k in (mydict.values(), randint(0,9))}
Nhưng tùy chọn này mang lại cho tôi: TypeError: can only concatenate list (not "int") to list
Are các lỗi này xuất hiện vì tôi đang cố gắng để làm điều gì đó ngữ pháp ngôn ngữ không hiểu, hoặc tôi thiếu một cái gì đó và tôi thực sự có thể sửa mã?
Nó không rõ ràng những gì đầu ra bạn * mong đợi *. Nói 'randint (0,9)' trả lại 3; bạn muốn kết quả nào? – DSM
Bạn có muốn một dict có khóa từ 'range (10)' và các giá trị ngẫu nhiên từ 'randint' không? – Navith
Bạn đang tập trung vào ý định mã. Ý định duy nhất ở đây là để xem liệu có một cách để có một bộ bộ đầu vào trong một sự hiểu biết hay không. Mã chỉ là cơ sở của tôi để thử nghiệm. –