2013-05-31 39 views
10

Python 3.3, một từ điển có cặp khóa-giá trị trong biểu mẫu này.Các mục đếm Python trong giá trị dict là một danh sách

d = {'T1': ['eggs', 'bacon', 'sausage']} 

Giá trị là danh sách có độ dài thay đổi và tôi cần phải lặp qua các mục danh sách. Công trình này:

count = 0 
for l in d.values(): 
    for i in l: count += 1 

Nhưng nó xấu xí. Phải có một cách Pythonic hơn, nhưng tôi dường như không thể tìm thấy nó.

len(d.values()) 

sản xuất 1. Đó là 1 danh sách (DUH). Nỗ lực với Số lượt truy cập từ here cho lỗi 'không thể loại bỏ'.

Trả lời

35

Sử dụng sum() và độ dài của mỗi giá trị từ điển:

count = sum(len(v) for v in d.itervalues()) 

Nếu bạn đang sử dụng Python 3, sau đó chỉ cần sử dụng d.values().

bản demo nhanh với mẫu đầu vào của bạn và một trong những mỏ:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']} 
>>> sum(len(v) for v in d.itervalues()) 
3 
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(len(v) for v in d.itervalues()) 
7 

Một Counter sẽ không giúp bạn nhiều ở đây, bạn không phải tạo ra một số lượng cho mỗi mục, bạn đang tính toán tổng chiều dài của tất cả các bạn giá trị.

+0

Cảm ơn! Rất hữu ích, như thường lệ :) – RolfBly

7
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(map(len, d.values())) 
7 
0

Tôi đang tìm câu trả lời cho điều này khi tôi tìm thấy chủ đề này cho đến khi tôi nhận ra rằng tôi đã có một cái gì đó trong mã của tôi để sử dụng này cho. Đây là những gì tôi đã đưa ra:

count = 0 

for key, values in dictionary.items(): 
     count = len(values) 

Nếu bạn muốn lưu số lượng cho mỗi mục từ điển bạn có thể tạo từ điển mới để lưu số cho mỗi khóa.

count = {} 

for key, values in dictionary.items(): 
     count[key] = len(values) 

tôi có thể không chính xác tìm thấy từ phiên bản phương pháp này là có sẵn nhưng tôi nghĩ rằng phương pháp .items chỉ có sẵn bằng Python 3.

0

Làm bài tập ở nhà của tôi trên Treehouse tôi đến với điều này. Nó có thể được thực hiện đơn giản bằng một bước ít nhất (mà tôi biết), nhưng nó có thể được dễ dàng hơn cho người mới bắt đầu (như bản thân mình) để onderstand phiên bản này.

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']} 

total = 0 

for value in dict: 
    value_list = dict[value] 
    count = len(value_list) 
    total += count 

print(total)