2012-08-01 30 views
7

Tôi có từ điển danh sách mà tôi muốn thêm giá trị vào danh sách cụ thể ... Tôi có từ điển danh sách sau đây.Số lượng các mục Python trong từ điển của danh sách

d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill' 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 

Tôi muốn về cơ bản tính ra số lượng tên và trở lại trong. Vì vậy, trong trường hợp này nó sẽ là một cái gì đó giống như

Adam: 2 
Bill: 2 
John: 1 
Bob: 1 
Joe: 1 

Để làm cho mọi việc dễ dàng hơn, tất cả các tên là yếu tố thứ hai trong danh sách hoặc

for i in d: 
    d[i][1] 

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện điều này một cách hiệu quả? Hiện tại, tôi chỉ kiểm tra thủ công từng tên và đếm và trả lại tên đó =/

Cảm ơn trước!

+0

Điều gì sẽ xảy ra nếu nó không chỉ ở vị trí số 1, vì vậy nếu nó được truy cập bởi i [x] trong đó x là vị trí đặt phần tử? Các giá trị [x] doesnt có vẻ hoạt động nếu bạn duyệt qua tất cả các d.itervalues ​​ – user1530318

Trả lời

17

collections.Counter luôn tốt để đếm mọi thứ.

>>> from collections import Counter 
>>> d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill', 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 
>>> # create a list of only the values you want to count, 
>>> # and pass to Counter() 
>>> c = Counter([values[1] for values in d.itervalues()]) 
>>> c 
Counter({'Adam': 2, 'Bill': 2, 'Bob': 1, 'John': 1, 'Joe': 1}) 
+0

Có vẻ tốt! Bất kỳ cách nào để xóa phần "Số lượt truy cập" và chỉ trả lại danh sách đó bằng các số? – user1530318

+1

nó đã là một đối tượng giống như từ điển, nhưng bạn có thể biến nó thành một từ điển thuần túy với dict (c). – monkut

1
d = {'key': 'value'} 
temp_dict = {} 
for key, values in d.items(): 
    if values[1] in temp_dict: 
     temp_dict[values[1]] = temp_dict[values[1]] + 1 
    else: 
     temp_dict[values[1]] = 1 

Mã này dài hơn câu trả lời trước, nhưng nó chỉ là một cách khác để tạo ra kết quả tương tự. Dù sao, temp_dict sẽ lưu trữ tên dưới dạng khóa và giá trị làm số lần hiển thị.

Các vấn đề liên quan